索引 索引的介紹與優化

2022-04-11 04:02:18 字數 1369 閱讀 3977

索引:儲存引擎用於快速找到記錄的資料結構

b+ 樹: 多路搜尋樹

b+樹能加快訪問資料速度, 不需要訪問全表來查詢資料,而是從根節點中進行搜尋, 根節點中儲存了子節點的指標(並且包含子節點的上限與下限),選擇正確的子節點進行查詢,既可以找到對應值。

可以使用b-tree 查詢型別:

使用如下表說明查詢型別

create

table

people

全值匹配: 和索引中所有列匹配(所有列有 f_name, l_name, birth), 如: 查詢 f_name 為『allen』 l_name 為 『cuba』  生日是 '1990-01-01'的

匹配最左字首: 匹配所有的前幾列(一定要從左到右, 依次選,不能跳躍), 如 查詢 f_name 為『allen』 l_name 為 『cuba』 的

匹配列字首:匹配某一列值的開頭, 如 查詢f_name 為 『allen』  並且 l_name 中第乙個字為 『c』 的人 

匹配範圍值:用於查詢 f_name 在 'allen' 和 'barrymore' 之間的

索引的限制:

如果不是從索引的最左列開始(第一列)則無法使用索引(如:無法查詢生日為某一天的特定生日的人)

不能跳過索引中的列

如果查詢中某個列有範圍查詢,則右邊的索引都無法使用

雜湊索引採用hash表實現, 只有精確匹配才有效, 儲存引擎為每一列新增乙個索引列計算得到的索引值,並且不同的值得到的索引不一樣,hash儲存在索引中,也在hash表中儲存指向每個資料行的指標

限制索引自身只需要儲存 hash值,所以不能使用索引中的值來避免讀取行

不能排序(按照hash讀取的)

不支援匹配查詢,只支援等值查詢

存在hash衝突

唯一索引:加速查詢 + 列值唯一(null)

主鍵索引: 加速查詢 + 列值唯一(null)

組合索引:多列值構成索引

覆蓋索引:索引包含了查詢的所有列,查詢時候只需要執行一次查詢就可以得到結果資料

聚簇索引

葉子結點是資料而非資料指標(innodb)

優點:缺點:

非聚簇索引

葉子結點為資料指標而非資料

資料分布

innodb

myisam

SQL的優化及索引介紹

今天看到了乙個貼子,簡單介紹一下 影響查詢效能的兩個關鍵因素 索引,表掃瞄次數 所以優化的目標就是怎樣更好的利用索引和減少表掃瞄次數 不過得先知道什麼是索引?索引有什麼特點?有幾種型別的索引?索引是對資料庫表中一列或多列的值進行排序的一種結構,例如 employee 表的姓 name 列。如果要按姓...

MySQL優化 二 索引的介紹

索引的作用 1.提高查詢的速度 2.提高排序的速度 3.提高分組的速度 btree型別的索引 內部實際採用二叉樹的資料結構,例如 4 2 6 1 3 5 7採用類似的資料結構將資料的查詢時間複雜度從n 2降低到log2n hash型別的索引採用hash演算法,將每乙個主鍵進行自定義的hash函式從而...

mysql單列索引與聯合索引介紹

mysql單列索引與聯合索引介紹 1.or兩邊乙個單列索引,乙個沒索引,索引不生效 explain select from me sku where sku name code jcxcmft or product id 7016497 2.or兩邊都是單列索引,兩個索引生效 多個or,多個單列索引...