MySQL 三年模擬五年面試之一網打盡系列(2)----- 建立高效能索引

bossaiguo發表於2019-08-03

索引類似於書籍的目錄,要想找到一本書的某個特定主題,需要先找到書的目錄,定位對應的頁碼。儲存引擎使用類似的方式進行資料查詢,先去索引當中找到對應的值,然後根據匹配的索引找到對應的資料行。

索引的影響

- 大大減少伺服器需要掃描的資料量
- 幫助伺服器避免排序和臨時表
- 將隨機I/O變順序I/O
- 大大提高查詢速度,降低寫的速度、佔用磁碟

使用場景

- 對於非常小的表,大部分情況下 全表掃描效率更高
- 中到大型表,索引非常有效
- 特大型的表,建立和使用索引的代價將隨之增加,可以使用分割槽技術來解決

索引的型別

- 普通索引:最基本的索引,沒有任何約束限制
- 唯一索引:與普通索引類似,但是具有唯一性約束
- 主鍵索引:特殊的唯一索引,不允許有空值
- 組合索引:將多個列組合在一起建立索引,可以覆蓋多個列

索引的建立原則

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

注意事項

- 複合索引遵循字首原則
- like查詢,%不能在前,可以使用全文索引
- column is null 可以使用索引
- 如果MySQL 估計使用索引比全表掃面更慢,會放棄使用索引
- 如果 or 前的條件中的列有索引,後面沒有,索引都不會被用到
- 列型別時字串,查詢時一定要給值加引號,否則索引失效

相關文章