普通索引與唯一索引,應該怎麼選擇?讀後總結

2021-09-26 07:41:37 字數 972 閱讀 3092

在業務**已經保證了不會寫入重複的字段,那麼盡量使用普通索引

普通索引與唯一索引對比:

在查詢過程

select id from t where k=5;從這條查詢語句開始分析,分別分析k為普通索引時與唯一索引是的區別

普通索引:在查到滿足條件的記錄,還需要繼續往下查詢。這裡就用到了之前說的假設,業務已經保證了不會寫入重複字段,否則查詢次數與重覆記錄成線性增長。但是若不重複的情況。也就比唯一索引多一次查詢比較的操作。innodb資料是以記憶體頁儲存的。innodb的資料頁預設大小16kb,資料讀就讀乙個資料頁。

唯一索引:查詢到滿足條件的記錄直接返回。

對於查詢來說 普通索引與唯一索引基本差不多。

比較大的差別是在更新過程中:(ps:尤其是寫多讀少的系統)

當需要更新乙個資料頁時,如果資料頁在記憶體中就直接更新,如果這個資料頁不在記憶體中,innodb會在不影響資料一致性的情況下,將更新操作快取在change buffer中,這樣就不需要從磁碟中讀入這個資料頁。下次訪問這個資料頁時候,從磁碟將資料頁讀入記憶體,從change buffer 中拿到這個資料頁是更新操作。將這個頁更新成髒頁。changebuffer也是會被持久化的。將change buffer 應用到資料頁上的操作稱為merge,除了當訪問這個資料頁的時候,會merge,有後台執行緒定期merge。在資料庫正常關閉也會merge。

change buffer減少了將資料頁讀入記憶體,mysql的記憶體是從buffer pool 分配的,從而避免占用記憶體,提高記憶體佔用率。所以對於寫入後立馬會讀的系統,change buffer並不會提高更新效率。

唯一索引不使用change buffer

在實際使用過程中,普通索引和change buffer的配合使用,對於資料量大的表的更新優化還是很明顯的。

redo log wal提公升效能的核心機制是儘量減少了隨機讀寫。將隨機讀寫變為了順序讀寫。

change buffer主要節省的是隨機讀磁碟的io,在更新操作時不用從磁碟讀書資料。

唯一索引和普通索引怎麼選擇

前段時間還在忙,終於又出點空更新了,雖然不是所有的付出都有收穫,很多時候需要我們先付出才可以看到希望。mysql 類的文章看的人比較少,我想一方面可能是大家更熱衷於比較前言的技術,像 mysql 類的已經發展很久的基礎資料庫,關注的人反而少,當時我在學習 mysql 的過程中發現,mysql 的很多...

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

mysql普通索引和唯一索引的區別 所以,普通索引和唯一索引的主要區別在於插入和修改,換個說法就是能否使用change buffer,那麼change buffer就是是什麼,有什麼用就是我們接下來要討論的話題。change buffer中儲存的是mysql的更新操作 從名字上就能看出來 當我們在更...

MySQL普通索引與唯一索引

總結參考文獻 當我們需要在乙個唯一欄位上建立索引時,究竟是建立普通索引還是唯一索引的效能更好呢?這時需要從兩個角度考慮 對於普通索引來說,查詢到滿足條件的第乙個記錄後,需要查詢下乙個記錄,直到碰到第乙個不滿足條件的記錄。對於唯一索引來說,由於索引定義了唯一性,查詢到第乙個滿足條件的記錄後,就會停止繼...