驗證索引是否生效提公升查詢效率
避免索引失效
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 ...