mysql優化 - mysql innodb 與 myisam 鎖
淡淡烟草味
淡淡烟草味 2017-05-24 11:34:38
0
1
931

innodb


insert會加鎖嗎?如果會加鎖,那意義是什麼?
在innodb中update和delete都會隱含地加上排它鎖
update table set ... where id in(1,2,3,4);請問排它鎖是直接給這四筆記錄添加,還是按照id依序加鎖,修改,commit;

myisam


delete,update 會隱含添加寫鎖嗎?
select 會隱式新增讀鎖嗎?
如果以兩種情況會加,那都是表鎖級別,那並發就特別差,對嗎?

兩個引擎的選擇
MyISAM:如果執行大量的SELECT,MyISAM是更好的選擇,請問這是為什麼?我實際測試360萬條數據,都用到了索引的情況下select,innodb的效率高很多.

InnoDB:如果你的資料執行大量的INSERT或UPDATE,應該使用InnoDB表, 這是因為myisam表鎖的原因?

淡淡烟草味
淡淡烟草味

全部回覆(1)
大家讲道理

謝邀。

InnoDB
InnoDB對INSERT可能只鎖定表頭吧,總之不會鎖定全表的;INSERT可能只锁表头吧,总之不会锁全表的;
UPDATE(如果没有FOR UPDATELOCK IN SHARE MODE)和DELETE在执行时会加写锁,有时就是锁全表,所以会影响并发性能,但这只是一瞬间的事,所以并发不高的情况下往往看不出来;
一次UPDATEUPDATE(如果沒有FOR UPDATELOCK IN SHARE MODE)和DELETE在執行時會加寫鎖,有時就是鎖全表,所以會影響並發性能,但這只是一瞬間的事,所以並發不高的情況下往往看不出來;

一次UPDATE多行,肯定是多行一起鎖,提交後一起釋放的,因為MySQL要保證這條語句的原子性,當一條有主鍵衝突時,其他的也都不能提交了。

MySQL
UPDATEDELETE都会加写锁,而且锁全表;
SELECT会加读锁,所以多个SELECT可以并发,但不能和UPDATEDELETE并发;
INSERT的加锁有点特殊,锁的强度可能介于读锁和写锁之间,与SELECTINSERTUPDATEDELETE都會加寫鎖,而且鎖全表;

SELECT會加讀鎖,所以多個SELECT可以並發,但不能和UPDATEDELETE併發;

INSERT的加鎖有點特殊,鎖的強度可能介於讀鎖與寫入鎖之間,與SELECTINSERT可以並發。 SELECT而言性能不会比InnoDB好很多,这还取决于行的存储方式,比如MyISAM的FIXED可能会比DYNAMIC
最後,MyISAM就快一些。 另外,你的這個例子肯定會對InnoDB更有利些:如果改成一個非主鍵的索引,那麼InnoDB未必會那麼快;如果只SELECT id這一列,那麼MyISAM未必這麼慢。其中的道理可以搜尋

聚集索引🎜。 🎜
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板