怎樣正確建立MySQL索引的方法詳解

2022-09-25 20:57:12 字數 1575 閱讀 3356

索引類似大學圖書館建書目索引,可以提高資料檢索的效率,降低資料庫的io成本。mysql在300萬條記錄左右效能開始逐漸下降,雖然官方文件說500~800w記錄,所以大資料量建立索引是非常有必要的。mysql提供了explain,用於顯示sql執行的詳細資訊,可以進行索引的優化。

什麼是索引?

mysql官方對索引的定義為:索引(index)是幫助mysql高效獲取資料的資料結構。我們可以簡單理解為:快速查詢排好序的一種資料結構。mysql索引主要有兩種結構:b+tree索引和hash索引。我們平常所說的索引,如果沒有特別指明,一般都是指b樹結構組織的索引(b+tree索引)。索引如圖所示:

最外層淺藍色磁碟塊1裡有資料17、35(深藍色)和指標p1、p2、p3(黃色)。p1指標表示小於17的磁碟塊,p2是在17-35之間,p3指向大於35的磁碟塊。真實資料存在於子葉節點也就是最底下的一層3、5、9、10、13……非葉子節點不儲存真實的資料,只儲存指引搜尋方向的資料項,如17、35。

查詢過程:例如搜尋28資料項,首先載入磁碟塊1到記憶體中,發生一次i/o,用二分查詢確定在p2指標。接著發現28在26和30之間,通過p2指標的位址載入磁碟塊3到記憶體,發生第二次i/vlbtlxvio。用同樣的方式找到磁碟塊8,發生第三次i/o。

真實的情況是,上面3層的b+twww.cppcns.comree可以表示上百萬的資料,上百萬的資料只發生了三次i/o而不是上百萬次i/o,時間提公升是巨大的。

資料表索引可以提高資料的檢索效率,也可以降低資料庫的io成本,並且索引還可以降低資料庫的排序成本。排序分組操作主要消耗的就是cpu資源和記憶體,所以能夠在排序分組操作中好好的利用索引將會極大地降低cpu資源的消耗。下面我們將簡單的分析一下怎樣正確建立mysql資料索引。

怎樣判斷是否需要建立索引?

1、某些字段需要頻繁用作查詢條件時需要為它建立索引

這個應該都知道,什麼樣才是頻繁呢?綜合分析你執行的所有sql語句。最好將他們乙個個都列出來。然後分析,發現其中有些欄位在大部分的sql語句查詢時候都會用到,那麼就果斷為他建立索引。

2、唯一性太差的字段不適合建立索引

什麼是唯一性太差的字段?如狀態字段、型別字段。那些只儲存固定幾個值的字段,例如使用者登入狀態、訊息的status等。這個涉及到了索引掃瞄的特性。例如:通過索引查詢鍵值為a和b的某些資料,通過a找到某條相符合的資料,這條資料在x頁上面,然後繼續掃瞄,又發現符合a的資料出現在了y頁上面,那麼儲存引擎就會丟棄x頁面的資料,然後儲存y頁面上的資料,一直到查詢完所有對應a的資料,然後查詢b欄位,發現x頁面上面又有對應b欄位的資料,那麼他就會再次掃瞄x頁面,等於x頁面就會被掃瞄2次甚至多次。以此類推,所以同乙個資料頁可能會被多次重複的讀取,丟棄,在讀取,這無疑給儲存引擎極大地增加了io的負擔。

3、更新太頻繁地字段不程式設計客棧適合建立索引

當你為某個字段建立索引時候,如果再次更新這個字段資料時,資料庫就會自動更新他的索引,所以當這個字段更新太頻繁地時候那麼就會不斷的更新索引,效能的影響可想而知。大概被檢索幾十次才會更新一次的字段才比較符合建立索引的規範。而如果乙個字段同乙個時間段內被更新多次,那麼果斷不能為他建立索引。

4、不會出現在where條件中的字段不該建立索引

這個其實沒什麼好程式設計客棧說的,不會用作查詢條件的字段建立了索引也沒用。

總結

mysql怎樣建立索引 mysql如何建立索引?

mysql建立索引的方法 1 使用create table語句配合index或unique關鍵字在建立表的時候直接建立索引 2 使用alter table語句來直接建立索引 3 使用create index語句對錶增加普通索引或unique索引。mysql如何建立索引?1 alter table a...

如何正確的建立MySQL索引

1 較頻繁地作為查詢條件的字段 這個都知道。什麼是教頻繁呢?分析你執行的所有sql語句。最好將他們乙個個都列出來。然後分析,發現其中有些欄位在大部分的sql語句查詢時候都會用到,那麼就果斷為他建立索引。2 唯一性太差的字段不適合建立索引 什麼是唯一性太差的字段。如狀態字段 型別字段。那些只儲存固定幾...

正確建立 使用索引

集合可以預知是比較小的,不必要建立索引,因為全表掃瞄的非常快,不必要維護索引 可預知每次查詢的結果集合佔比比較大時 30 以上,佔比越大索引速度越慢 就沒有必要建立索引,因為使用索引需要進行2次查詢 查詢條目和根據索引指標去查詢相應的文件 正確選擇的文件字段建立索引,應該選擇字段值基數大的建立索引 ...