如何解決SQL并發(fā)問(wèn)題?
高并發(fā)最可能遇到的就是思索問(wèn)題了。
首先根據(jù)業(yè)務(wù)確定使用的什么隔離級(jí)別,一般要么是確認(rèn)讀,要么是可重復(fù)讀。
確認(rèn)讀有可能兩次讀的數(shù)據(jù)不一致
可重復(fù)讀也叫快照讀,能確保每次讀的數(shù)據(jù)一致,但不保證能讀到最新commit的數(shù)據(jù)。
其次要考慮更新語(yǔ)句是否會(huì)產(chǎn)生死鎖,要確認(rèn)表中相關(guān)字段都有什么鎖。
主鍵:主鍵索引上鎖,數(shù)據(jù)行上鎖
唯一索引:索引上鎖,主鍵索引上鎖,數(shù)據(jù)行上鎖
普通索引:會(huì)鎖住所有符合條件的索引和行,還會(huì)上間隙鎖
無(wú)索引:會(huì)鎖全表,逐漸釋放不符合條件的鎖
因此要盡可能只鎖需要的行,避免不同事務(wù)鎖住互相需要的行,造成死鎖。