這篇文章主要講解了“mysql增加索引不生效的原因是什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“mysql增加索引不生效的原因是什么”吧!
增加索引就是增加一個索引文件,存放的是數據的地址,類似與我們文檔的目錄,在查找過程中可以不用從書的內容查找,直接根據目錄對應的頁碼查找。索引是根據地址查找。
創建索引,索引使用的數據結構也有很多種。常見的是B-tree,哈希等。mysql默認使用的數據庫索引是innerDB,innerDB的索引結構是B-tree。
但是在使用過程中哪些情況增加索引無法達到預期的效果呢?下面列舉幾種常見情況:
假設name age address 都已經加了索引。索引名字分別為 index_name,index_age,index_address。
執行計劃的 type
表示MySQL在表中找到所需行的方式,又稱“訪問類型”,常見類型如下:
ALL, index, range, ref, eq_ref, const, system, NULL
ALL:Full Table Scan, MySQL將遍歷全表以找到匹配的行
index:Full Index Scan,index與ALL區別為index類型只遍歷索引樹
range:索引范圍掃描,對索引的掃描開始于某一點,返回匹配值域的行。顯而易見的索引范圍掃描是帶有between或者where子句里帶有<, >查詢。當mysql使用索引去查找一系列值時,例如IN()和OR列表,也會顯示range(范圍掃描),當然性能上面是有差異的。
ref:使用非唯一索引掃描或者唯一索引的前綴掃描,返回匹配某個單獨值的記錄行
eq_ref:類似ref,區別就在使用的索引是唯一索引,對于每個索引鍵值,表中只有一條記錄匹配,簡單來說,就是多表連接中使用primary key或者 unique key作為關聯條件。
沒引號 type=all
有引號 tye=ref
首先mysql有個類型轉換規則就是將“字符轉成數字”,上面的sql是包含運算的:
explain SELECT name,age,address FROM user where cast(name as signed)= 10;
(not , not in, not like, <>, != ,!>,!< ) 使用索引效果
1、聯合索引中關聯字段沒有使用相同的字符集;
2、聯合索引查詢時沒有用到第一個索引字段,即不滿足最左原則;
3、本身數據量很少,mysql會判斷是否需要使用索引;
感謝各位的閱讀,以上就是“mysql增加索引不生效的原因是什么”的內容了,經過本文的學習后,相信大家對mysql增加索引不生效的原因是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。