10分鐘讓你明白MySQL是如何利用索引的
阿新 • • 發佈:2018-12-09
一、前言
在MySQL中進行SQL優化的時候,經常會在一些情況下,對MySQL能否利用索引有一些迷惑。
譬如:
- MySQL 在遇到範圍查詢條件的時候就停止匹配了,那麼到底是哪些範圍條件?
- MySQL 在LIKE進行模糊匹配的時候又是如何利用索引的呢?
- MySQL 到底在怎麼樣的情況下能夠利用索引進行排序?
今天,我將會用一個模型,把這些問題都一一解答,讓你對MySQL索引的使用不再畏懼
二、知識補充
key_len
EXPLAIN執行計劃中有一列 key_len 用於表示本次查詢中,所選擇的索引長度有多少位元組,通常我們可藉此判斷聯合索引有多少列被選擇了。
在這裡 key_len 大小的計算規則是:
- 一般地,key_len 等於索引列型別位元組長度,例如int型別為4 bytes,bigint為8 bytes;
- 如果是字串型別,還需要同時考慮字符集因素,例如:CHAR(30) UTF8則key_len至少是90 bytes;
- 若該列型別定義時允許NULL,其key_len還需要再加 1 bytes;
- 若該列型別為變長型別,例如 VARCHAR(TEXT\BLOB不允許整列建立索引,如果建立部分索引也被視為動態列型別),其key_len還需要再加 2 bytes;
三、哪些條件能用到索引
首先非常感謝登博,給了我一個很好的啟發,我通過他的文章,然後結合自己的理解,製作出了這幅圖

乍一看,是不是很暈,不急,我們慢慢來看
