mysql鎖與索引

2022-06-16 16:21:09 字數 837 閱讀 3251

當走索引就是使用行鎖,當索引失效就會使用表鎖

對索引使用一下操作導致索引失效

預先關閉自動提交事務功能

set autocommit=0;
視窗a執行更新語句,當前事務對其他食物不可見 -- 已提交讀

update test_innodb_lock set b='a1' where a=1;

select * from test_innodb_lock;

在視窗a食物提交之前,視窗b看到的還是老資料

select * from test_innodb_lock;
視窗a執行更新,不提交

update test_innodb_lock set b='a2' where a=1;
此時,視窗b也執行更新

update test_innodb_lock set b='a3' where a=1;
由於視窗a沒有commit,視窗b的事務就會等待獲取鎖,直到視窗a事務提交

索引失效,行鎖公升級為表鎖,整個表都被鎖住,其他事務等待

*避免使用or關鍵字變更資料,select可以考慮使用in查詢更多的資料,然後在**裡過濾不需要的資料(代價)

多占用空間以減少時間

當我們採用範圍條件查詢資料時,innodb 會對這個範圍內的資料進行加鎖。比如有 id 為:1、3、5、7 的 4 條資料,我們查詢 1-7 範圍的資料(>

MySQL索引與鎖的機制 五 鎖

一般情況下,沒有用鎖。資料庫隱式加了 表鎖 對整個表 加鎖,開銷小,加鎖快 不會出現死鎖,鎖定粒度大 發生鎖衝突概率高,併發度底 表鎖分兩種 行鎖 對 某一行 加鎖,開銷大,加鎖慢,會出現死鎖 鎖定 粒度小 發生鎖衝突的概率底,併發度高 innodb 支援行鎖 和 表鎖,其中行鎖是 基於索引 的,只...

mysql索引,事務,鎖

索引就是用來優化查詢,加快查詢速度。索引是優化查詢的最有效手段 優勢 優化查詢加快檢索速度 根據索引分組和排序可以加快分組和排序 劣勢 索引本身也是表,在一定程度上會占用儲存空間 create table mytable id int not null,username varchar 16 not...

MySQL索引和鎖

索引和鎖可以讓查詢鎖定更少的行。如果你的查詢從不訪問那些不需要訪問的行,那麼就會鎖定更少的行,從兩個方面來看這對效能都有好處。首先,雖然innodb的行鎖效率很高,記憶體使用也很少,但是鎖定行的時候仍然會帶來額外的開銷,其次,鎖定超過需要的行會增加鎖競爭,並減少併發性。innodb只有在訪問行的時候...