mysql普通索引和唯一索引選擇

2021-10-25 06:26:21 字數 841 閱讀 8004

mysql普通索引和唯一索引的區別:

所以,普通索引和唯一索引的主要區別在於插入和修改,換個說法就是能否使用change buffer,那麼change buffer就是是什麼,有什麼用就是我們接下來要討論的話題。

change buffer中儲存的是mysql的更新操作(從名字上就能看出來)。當我們在更新乙個資料頁的時候,如果這個資料頁在記憶體中的話就直接更新,如果資料頁不在話,就將更新操作儲存在change buffer中,在下次查詢需要訪問這個資料頁的時候,將資料頁讀入記憶體後,然後執行change buffer中與該資料頁有關的操作。這樣做的好處是可以減少磁碟io次數,而磁碟io數也是mysql時間花銷最大的地方。

對於唯一索引來說,由於需要判斷這個操作是否違反唯一性約束,所以需要先將資料頁載入到記憶體中,而一旦資料頁被載入到記憶體了,就沒有必要使用change buffer了,可以直接修改了。

既然普通索引在進行資料更新的時候,修改的操作可能會放在chang buffer中,等在下次訪問這個資料頁的時候在進行與該資料頁相關的更新操作,那有沒有可能chang buffer丟失,導致更新資料的丟失?

答案是不會的,因為change buffer實際上是可以持久化的資料。也就是說,change buffer在記憶體中有拷貝,同時也會被寫入到磁碟中。

將change buffer中的操作應用的對應的資料頁,得到最新的結果的過程稱為merge。除了訪問這個資料頁會觸發merge外,系統後台也會定期的merge。在資料庫正常關閉的過程中,也會觸發merge。

綜上,由於普通索引更新時可以通過chang buffer來減少磁碟io的次數,所以普通索引在進行更新操作時的效率比唯一索引的效率高。所以如果可以的話,請使用普通索引。

MySQL唯一索引和普通索引選哪個?

想象這樣乙個場景,在設計一張使用者表時,每人的身份證號是唯一的,需要搜尋。但由於身份證號字段較大,不好將其作為主鍵。在業務 已經保證插入身份證唯一的情況下,可以選擇建立唯一索引和普通索引,這時該如何選擇呢?接下來,將從查詢和更新的執行過程進行分析。查詢過程 假設 k 是表 t 上的索引,在搜尋sel...

MySQL 普通索引 唯一索引和主索引

1 普通索引 普通索引 由關鍵字key或index定義的索引 的唯一任務是加快對資料的訪問速度。因此,應該只為那些最經常出現在查詢條件 wherecolumn 或排序條件 orderbycolumn 中的資料列建立索引。只要有可能,就應該選擇乙個資料最整齊 最緊湊的資料列 如乙個整數型別的資料列 來...

MySQL 普通索引 唯一索引和主索引

1.普通索引 普通索引 由關鍵字key或index定義的索引 的唯一任務是加快對資料的訪問速度。因此,應該只為那些最經常出現在查詢條件 where column 或排序條件 order by column 中的資料列建立索引。只要有可能,就應該選擇乙個資料最整齊 最緊湊的資料列 如乙個整數型別的資料...