1. 程式人生 > > 10分鐘讓你明白MySQL是如何利用索引的

10分鐘讓你明白MySQL是如何利用索引的

一、前言

在MySQL中進行SQL優化的時候,經常會在一些情況下,對MySQL能否利用索引有一些迷惑。

譬如:

  1. MySQL 在遇到範圍查詢條件的時候就停止匹配了,那麼到底是哪些範圍條件?
  2. MySQL 在LIKE進行模糊匹配的時候又是如何利用索引的呢?
  3. 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;

三、哪些條件能用到索引

首先非常感謝登博,給了我一個很好的啟發,我通過他的文章,然後結合自己的理解,製作出了這幅圖

64472e0456938076bdcb4e9a5a0241c5ee7b7b4b

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

原文連結