mysql 技能5 索引的使用

2021-10-03 07:15:03 字數 1386 閱讀 8248

驗證索引是否生效提公升查詢效率

避免索引失效

1).全值匹配 ,對索引中所有列都指定具體值。

2). 最左字首法則:如果索引了多列,要遵守最左字首法則。指的是查詢從索引的最左前列開始,並且不跳過索引中的列。

3). 索引列上進行運算操作, 索引失效。

4). 字串不加單引號,造成索引失效。

由於,在查詢是,沒有對字串加單引號,mysql的查詢優化器,會自動的進行型別轉換,造成索引失效。

5). 盡量使用覆蓋索引,避免select *

盡量使用覆蓋索引(只訪問索引的查詢(索引列完全包含查詢列)),減少select * 。

如果查詢列,超出索引列,也會降低效能。

using index :使用覆蓋索引的時候就會出現

using where:在查詢使用索引的情況下,需要回表去查詢所需的資料

using index condition:查詢使用了索引,但是需要回表查詢資料

using index ; using where:查詢使用了索引,但是需要的資料都在索引列中能找到,所以不需要回表查詢資料

6). 用or分割開的條件, 如果or前的條件中的列有索引,而後面的列中沒有索引,那麼涉及的索引都不會被用到。

7). 以%開頭的like模糊查詢,索引失效。

如果僅僅是尾部模糊匹配,索引不會失效。如果是頭部模糊匹配,索引失效。

解決方案 :通過覆蓋索引來解決

8). 如果mysql評估使用索引比全表更慢,則不使用索引。

9). is null , is not null 有時索引失效。

10). in 走索引, not in 索引失效。

11). 單列索引和復合索引。

盡量使用復合索引,而少使用單列索引 。

單列索引:資料庫會選擇乙個最優的索引(辨識度最高索引)來使用,並不會使用全部索引 。

– 檢視索引使用情況

show status like 『handler_read%』;

show global status like 『handler_read%』;

handlerreadfirst:索引中第一條被讀的次數。如果較高,表示伺服器正執行大量全索引掃瞄(這個值越低越好)。

handlerreadkey:如果索引正在工作,這個值代表乙個行被索引值讀的次數,如果值越低,表示索引得到的效能改善不高,因為索引不經常使用(這個值越高越好)。

handlerreadprev:按照鍵順序讀前一行的請求數。該讀方法主要用於優化order by … desc。

handlerreadrnd :根據固定位置讀一行的請求數。如果你正執行大量查詢並需要對結果進行排序該值較高。你可能使用了大量需要mysql掃瞄整個表的查詢或你的連線沒有正確使用鍵。這個值較高,意味著執行效率低,應該建立索引來補救。

mysql_技能

MySQL閱讀筆記 5 索引的使用

全表掃瞄乙個表的過程其實是先把這個表從磁碟上載入到記憶體中,然後從記憶體中比較匹配條件是否滿足,把符合搜尋條件的記錄加入到結果集,即 找到葉子節點左側最小值後順序遍歷雙向鍊錶依次和查詢條件比較 全表掃瞄過程中內節點沒參與,但是計算全表掃瞄的i o成本時將所有節點考慮進去了 建立了索引不一定使用,只有...

mysql 索引的使用

一 什麼是索引!學乙個技術的時候,首先要知道他是什麼,他的作用是什麼,他能幹什麼 索引用來快速地尋找那些具有特定值的記錄,所有mysql索引都以b 樹的形式儲存。如果沒有索引,執行查詢時mysql必須從第乙個記錄開始掃瞄整個表的所有記錄,直至找到符合要求的記錄。表裡面的記錄數量越多,這個操作的代價就...

mysql索引的使用

索引分單列索引和組合索引。單列索引,即乙個索引只包含單個列,乙個表可以有多個單列索引,但這不是組合索引。組合索引,即乙個索包含多個列。1 普通索引 這是最基本的索引,它沒有任何限制。它有以下幾種建立方式 建立索引 create index indexname on tablename column ...