為什么在單列索引的基礎上還需要組合索引?
select product_id from orders where order_id in (123, 312, 223, 132, 224);
我們當然每個字段都可以創建索引 在不建立組合索引的前提下 mysql只會用到其中一個最有效率的索引 ,效率平庸
但當我們建了組合索引后 (Btree索引結構下)當我們建立了組合索引prodect_id,order_id后像上面的語句 我們可以直接根據order_id查找到
product_id,不用再取文件中取product_id
組合索引的最左原則是什么?
組合索引,其實是相當於分別建立了下面三組組合索引:
- usernname,city,age
- usernname,city
- usernname
為什么沒有 city,age這樣的組合索引呢?這是因為MySQL組合索引“最左前綴”的結果。簡單的理解就是只從最左面的開始組合。並不是只要包含這三列的查詢都會用到該組合索引,下面的幾個SQL就會用到這個組合索引:
- SELECT * FROM mytable WHREE username="admin" AND city="鄭州"
- SELECT * FROM mytable WHREE username="admin"
而下面幾個則不會用到:
- SELECT * FROM mytable WHREE age=20 AND city="鄭州"
- SELECT * FROM mytable WHREE city="鄭州"
