MySQL建立高效能的索引

2021-09-25 09:25:19 字數 1328 閱讀 2157

b-tree 索引

儲存引擎帶來的不同。

1. 底層儲存儲存引擎不同使用的資料結構不同,ndb使用t-tree,即使他的名稱是btree,innodb使用的是b+tree。

2. 不同引擎也會以不同的方式使用b+tree,myisam使用字首壓縮技術使得索引更加小,innodb原資料格式進行儲存。

myisam索引通過**資料的物理位置**引用被索引的行,而innodb根據**主鍵的引用**被索引的行

資料結構b+樹

1. 記憶體:磁碟塊:資料項指標

2. 性質:

1. 索引字段盡量小:io次數取決於b+樹的高度,當資料數量為m的時候,資料項為n的時候,h=log(m+1)n。

當資料量不變,資料項越多則樹的高度越小,因為磁碟塊的大小固定,所以索引字段盡量小可以有更多的,這就是為什

麼b+樹要求把真實的資料放到葉子節點而不是內層節點,一旦放到內層節點資料項的數量就會減少,導致樹的增高,

資料項為1將會退化為線性表。

2. 索引的最左匹配特性(從左往右):當b+樹是復合的資料結構,比如(name,age,***)的時候,b+樹是從左往右的

建立索引的,這就相當於建立了三個索引 (name,age,***),(name,age),(name)

索引分類

普通索引:加速查詢

唯一索引

聯合索引:l 聯合主鍵索引,聯合唯一索引,聯合普通索引

聚簇索引和非聚簇索引

聚簇索引:葉子節點儲存一行資料

非聚簇索引:葉子節點儲存主鍵的值

命中索引和覆蓋索引:select 列、列(覆蓋索引)where id=「123」(命中索引)

新增索引的規則

最左匹配原則

重複列少的,字段型別錯誤

索引列不參與計算,少用like % not in or

少用* 使用join代替連線

盡量使用短索引

判斷索引是否生效

使用explain 檢視sql的執**況,通過執行計畫判斷索引的使用情況(key)

hash 索引

儲存結構

主要通過hash演算法(常見的有開放定位址法,平方取中法)

hash索引的弊端

重複列導致hash碰撞

hash不能在範圍查詢

hash不能被排序

不能避免全表掃瞄

full-text 索引

概述:用於代替效率比較低的like模糊匹配操作,通過全文索引一次匹配多個字段

儲存結構:分隔字段資料再進行索引,索引檔案儲存的分隔前的字串集合,與分隔後的索引資訊。

Mysql建立高效能索引

mysql索引的基礎和型別 索引的基礎 1.索引類似於書籍的目錄,要想找到一本書的某個特定主題,需要先查詢書的目錄,定位對應的頁碼 儲存引擎使用類似的方式進行資料查詢,先去索引當中找到對應的值,然後根據匹配的索引找到對應的資料行 索引對效能的影響 大大減少伺服器需要掃瞄的資料量,比如我們資料表中有一...

高效能mysql(一) 建立高效能索引

單列索引和多列索引 單列索引 多個單列索引的選擇問題 多個or條件 多個單列的效能往往效能很低,盡量建立高效的多列索引。多列索引 選擇合適的索引順序 避免範圍條件 在where子句中,in是有效的,範圍條件會導致後面的索引無效!在order by中,範圍條件和in都會導致無法按照索引排序!按照索引順...

mysql建立高效能的索引

mysql索引的基礎和型別 延伸 mysql索引建立的原則 延伸 mysql索引的注意事項 mysql索引的基礎和型別 1 索引對效能的影響 大大的減少了伺服器掃瞄的資料量 幫助伺服器避免排序和臨時表 將隨機i o變成順序i o 大大提高了查詢的速度,降低了寫的速度,占用磁碟。2 索引的型別 索引有...