创建高性能索引笔记
可以使用B-Tree索引的查詢類型
- 全值匹配 :和索引中的所有列進行匹配
- 匹配最左前綴 :可只是用索引的第一列
- 匹配列前綴 :也可以只匹配某一列的值的開頭部分
- 匹配范圍值 :查找在某個范圍的
- 精確匹配某一列并范圍匹配另外一列 :即第一列全批評,第二列范圍匹配
B-Tree索引的一些限制
如果不是按照索引的最左列開始查詢,則無法使用索引
不能跳過索引中的列,只有索引中的1、3列缺失了第二列,則只能使用索引的第一列
如果查詢中有某個列的范圍查詢,則其右邊的所有列無法使用索引進行優化查詢
高性能索引的策略
?
- 獨立的列
??????? ”獨立的列“ 是指索引列不能是表達式的一部分,也不能是函數的參數
- 前綴索引和索引的選擇性
??????? 有時需要索引很長的字符列,這會讓索引變得大且慢。一個策略是模擬哈希索引,通常還可以索引開始的部分字符,這里需要選擇合適的前綴長度,使前綴的選擇性達到完整列的選擇性,計算方式
SELECT COUNT(DISTINCT city)/COUNT(*) FROM sakila.city_demo;+----------------------------------------+ |COUNT(DISTINCT city)/COUNT(*) | +----------------------------------------+ | 0.0312 | +----------------------------------------+SELECT COUNT(DISTINCT LEFT(city, 3))/COUNT(*) AS sel3,COUNT(DISTINCT LEFT(city, 4))/COUNT(*) AS sel4,COUNT(DISTINCT LEFT(city, 5))/COUNT(*) AS sel5, COUNT(DISTINCT LEFT(city, 6))/COUNT(*) AS sel6,COUNT(DISTINCT LEFT(city, 7))/COUNT(*) AS sel7, FROM sakila.city_demo;+--------------------------------------------------+ |sel3 |sel4 |sel5 |sel6 |sel7 | |0.0239 |0.0293 |0.0305 |0.0309 |0.0310 | +-------------------------------------------------+查詢顯示達到7的時候再曾經長度,提升的效果已經很小了
- 多列索引
- 選擇合適的索引列順序
- 聚簇索引,innodb的數據存儲方式
轉載于:https://www.cnblogs.com/mliudong/p/3235022.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
- 上一篇: C语言如何产生随机数
- 下一篇: [转]Windows Shell 编程