1. 程式人生 > >Mysql建立高效能索引

Mysql建立高效能索引

面試真題: 簡單描述Mysql中,索引,主鍵,唯一索引,聯合索引的區別,對資料庫的效能有什麼影響?

Mysql索引的基礎和型別

索引的基礎:   1.索引類似於書籍的目錄,要想找到一本書的某個特定主題,需要先查詢書的目錄,定位對應的頁碼

  1. 儲存引擎使用類似的方式進行資料查詢,先去索引當中找到對應的值,然後根據匹配的索引找到對應的資料行

索引對效能的影響

  1. 大大減少伺服器需要掃描的資料量,比如我們資料表中有一千條資料,我們只要根據條件查詢其中的一條,我們只需要根據這一列建立一個對應的索引就可以。
  2. 幫助伺服器避免排序和臨時表
  3. 將隨機I/O變順序I/O
  4. 大大提高查詢速度,降低寫的速度,佔用磁碟

索引的使用場景

  1. 對於非常小的表,大部分情況下全表掃描效率會更高。不用去刻意的建立索引
  2. 中到大型表,索引非常有效
  3. 特大型的表,建立和使用索引的代價將隨之增長,刻意使用分割槽技術來解決,

索引的型別

  1. 索引有很多種型別,都是事先在儲存引擎層的
  2. 普通索引:最基本的索引,沒有任何約束限制
  3. 唯一索引:與普通索引類似,但是具有唯一性,比如現在我們有了一個a 你在建立一個a 就會報錯了
  4. 主鍵索引:特殊的唯一索引,不允許有控制
  5. 一個表只能有一個主鍵索引,可以有多個唯一索引
  6. 主鍵索引一定是唯一索引,唯一索引不是主鍵索引
  7. 主鍵可以與外來鍵構成參照完整性約束,防止資料不一致
  8. 組合索引:將多個列組合在一起建立索引,可以覆蓋多個列
  9. 外來鍵索引:只有InnoDB型別的表才可以使用外來鍵索引,保證資料的一致性,完整性和實現級聯操作
  10. 全文索引:mysql自帶的全文索引只能用於MyISAM,並且只能對英文進行全文索引

Mysql索引的建立原則

原則:

  1. 最適合索引的列是出現在where子句中的列,或連線子句中的列而不是出現在select關鍵字後的列
  2. 索引列的基數越大,索引的效果越好
  3. 對字串進行索引,應該制定一個字首長度,可以節省大量的索引空間
  4. 根據情況建立複合索引,複合索引可以提高查詢效率
  5. 避免建立過多的索引,索引會額外佔用磁碟空間,降低寫操作的效率
  6. 主鍵儘可能選擇較短的資料型別,可以有效減少索引的自盤佔用,提高查詢效率

 

mysql索引的注意事項

注意

  1. 複合索引遵守字首原則

可以生效的

不可生效的是

因為這種屬於是最左字首型別的  所以 必須有前面的在前才能使用,否則會不可使用,使用b不能忽略a 使用c不能忽略b

  1. Like查詢,%不能在前,可以使用全文索引

百分號不能在前,要不然就算給name設定了索引,所以也無法生效。可以使用全文索引

  1. Column is null可以使用索引
  2. 如果mysql估計使用索引比全盤掃描更慢,會放棄使用索引
  3. 如果or前的條件中的列有索引,後面的沒有,索引都不會被用到
  4. 列型別是字串型別,查詢時一定要給值加引號,否則索引失效

比如varchar(16)  

“100”

假如我在搜尋的時候 where name=100; 沒有去加引號的話 可以搜到 但是索引失效。

 

在一些mysql索引基礎考題中,我們可以輕鬆的通過索引基礎和型別來解決此類問題,對於一些索引建立注意事項方面的考點,我們可以通過索引建立的原則和注意事項來解決。

 

真題: 建立mysql複合索引應該注意哪些事項?