第6章 數(shù)據(jù)庫(kù)索引優(yōu)化

MySQL的索引優(yōu)化

MySQL支持的索引類(lèi)型

B-tree的特點(diǎn)

  • 加快查詢(xún)的速度
  • 更適合返回查找
enter description here

什么情況下用到B-tree

  • 全值匹配查詢(xún)
  • 匹配最左前綴的查詢(xún)
  • 匹配列前綴的查詢(xún)
  • 匹配范圍查找
  • 精確匹配左前并方位匹配另外一列
  • 只訪(fǎng)問(wèn)索引的查詢(xún)

B-tree的限制

  • 如果是按照索引的最左列開(kāi)始查找的,則無(wú)法使用索引
  • 使用索引時(shí)不能跳過(guò)索引中的列
  • Not in 和 <> 無(wú)法使用索引
  • 如果查詢(xún)中又某個(gè)列的范圍查詢(xún),則右邊的列都無(wú)法使用索引

Hash索引

特點(diǎn)

基于Hash表實(shí)現(xiàn)的,只能查詢(xún)條件精確的匹配。

對(duì)于Hash索引中所有的列,存儲(chǔ)引擎都會(huì)為每一行計(jì)算一個(gè)Hash碼,Hash索引中存放的就是Hash碼。

限制

enter description here
  • Hash索引必須進(jìn)行二次查找。

  • Hash索引無(wú)法用于排序

  • 只能進(jìn)行全值匹配,不支持范圍查找。不選擇列重復(fù)的字段上加這個(gè)索引。

聯(lián)合索引

什么是聯(lián)合索引:

聯(lián)合索引又叫復(fù)合索引。對(duì)于復(fù)合索引:Mysql從左到右的使用索引中的字段,一個(gè)查詢(xún)可以只使用索引中的一部份,但只能是最左側(cè)部分。例如索引是key index (a,b,c). 可以支持a | a,b| a,b,c 3種組合進(jìn)行查找,但不支持 b,c進(jìn)行查找 .當(dāng)最左側(cè)字段是常量引用時(shí),索引就十分有效。

注意:

1、需要加索引的字段,要在where條件中
2、數(shù)據(jù)量少的字段不需要加索引
3、如果where條件中是OR關(guān)系,加索引不起作用
4、符合最左原則

如何選擇索引列的順序?

  • 經(jīng)常被使用到的列優(yōu)先(經(jīng)常查詢(xún)的放在最左面)
  • 選擇性能高的列優(yōu)先
  • 寬度小的列優(yōu)先

覆蓋索引

優(yōu)點(diǎn)

  • 可以?xún)?yōu)化緩存,減少磁盤(pán)I/o
  • 可以減少隨機(jī)I/O,將隨機(jī)IO變成順序IO
  • 可以避免對(duì)Innodb主鍵引起的二次查詢(xún)
  • 可以避免MYISAM表進(jìn)行系統(tǒng)調(diào)用

缺點(diǎn)

  • 存儲(chǔ)引擎不支持覆蓋索引
  • 查詢(xún)使用了太多的列
  • 使用率了%like%查詢(xún)

使用索引來(lái)優(yōu)化查詢(xún)

利用索引優(yōu)化鎖

  • 索引可以減少鎖定的行數(shù)
  • 可以加快處理的速度,同時(shí)也加快了鎖的釋放

刪除重復(fù)和冗余的索引

定期更新索引的統(tǒng)計(jì)信息以及減少索引碎片

analyze table table_name
建立了主鍵索引就沒(méi)必要?jiǎng)?chuàng)建唯一索引了

代碼實(shí)例

覆蓋查詢(xún)
查詢(xún)所有的數(shù)據(jù)是無(wú)法使用覆蓋索引的

使用索引引來(lái)優(yōu)化索引

使用索引掃描來(lái)優(yōu)化排序

  • 索引順序和Order By 的子句的循序完全一致
  • 索引中所有的方向(升序、降序)和Order by 子句完全一致
  • Order by 中的字段全部在關(guān)聯(lián)中的第一張表中

為什么使用索引

  • 加上存儲(chǔ)引擎需要掃描數(shù)據(jù)的數(shù)量
  • 避免我們使用臨時(shí)表
  • 可以把隨機(jī)I/O變成順序I/O

索引不是越多越好

  • 索引會(huì)增加寫(xiě)操作成本
  • 太多的索引會(huì)增加查詢(xún)優(yōu)化器選擇的時(shí)間

索引優(yōu)化策略

image
image
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容