建議使用普通索引
原因是:
- 使用查詢時,普通索引與唯一索引性能差異可以忽略。
- 但是更新語言時,普通索引性能比唯一索引要好。
那麼爲什麼說"更新語言時,普通索引性能比唯一索引要好"呢?
原因是:
對於唯一索引來說,需要將數據頁讀入內存,判斷到沒有衝突,插入這個值,語句執行結束;
對於普通索引來說,則是將更新記錄在 change buffer,語句執行就結束了;
將數據從磁盤讀入內存涉及隨機 IO 的訪問,是數據庫裏面成本最高的操作之一。change buffer 因爲減少了隨機磁盤訪問,所以對更新性能的提升是會很明顯的。
普通索引更新語句時會將更新操作都會先緩存到change buffer中,且會一直累積,直到使用select語句查詢該數據。纔會調用merge,將change buffer中的數據寫入磁盤,這樣的操作減少了數據寫入磁盤的次數。
而mysql也會定時調用merge方法(在數據庫正常關閉(shutdown)的過程中,也會執行 merge 操作)。