MySQL的索引优化
生活随笔
收集整理的這篇文章主要介紹了
MySQL的索引优化
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
文章目錄
- 全值匹配
- 最左前綴原則
- 不在索引列上使用函數(shù),會(huì)導(dǎo)致索引失效而轉(zhuǎn)向使用全表掃描
- 范圍條件右邊的索引列會(huì)失效
- 盡量使用覆蓋索引
- 使用不等于操作符無(wú)法使用索引
- is null,is not null 一般情況下也無(wú)法使用索引
- like 以通配符開(kāi)頭的,索引會(huì)失效
- 少用 or 或 in,MySQL 不一定使用索引
- 查詢(xún)范圍過(guò)大,可能不會(huì)使用索引
全值匹配
例如,字段 film_id、actor_id 組成聯(lián)合索引 idx_film_actor_id,那么在查詢(xún)條件中使用到聯(lián)合索引的全部字段,則表示全值匹配。
最左前綴原則
使用復(fù)合索引的前面字段,但是不能跳過(guò)使用后面的字段
不在索引列上使用函數(shù),會(huì)導(dǎo)致索引失效而轉(zhuǎn)向使用全表掃描
范圍條件右邊的索引列會(huì)失效
盡量使用覆蓋索引
使用不等于操作符無(wú)法使用索引
is null,is not null 一般情況下也無(wú)法使用索引
like 以通配符開(kāi)頭的,索引會(huì)失效
mysql> select * from user where name like 'hello%'; -- 會(huì)使用索引,索引值的前面5個(gè)字符在索引樹(shù)中是有序的 mysql> select * from user where name like '%hello'; -- 不會(huì)使用索引,索引值的后面的若干個(gè)字符在索引樹(shù)中是無(wú)序的,所以無(wú)法使用索引解決 like ‘%字符串%’ 索引不被使用的方法:
少用 or 或 in,MySQL 不一定使用索引
如果 in (…) 里面的字段不要太多也許會(huì)使用索引,or 也是一樣;如果指定過(guò)多的字段,那么 MySQL 就會(huì)掃描索引樹(shù)多次,所以可能會(huì)放棄使用索引
查詢(xún)范圍過(guò)大,可能不會(huì)使用索引
select * from user where age >= 1 and age <= 2000;以上查詢(xún)可能就不會(huì)走索引,而是全表掃描,因?yàn)槟挲g范圍過(guò)大,優(yōu)化器評(píng)估到查詢(xún)條件已經(jīng)完全包含全表數(shù)據(jù)了,所以干脆就直接全表掃描了。建議拆分成幾個(gè)小范圍查詢(xún)。
總結(jié)
以上是生活随笔為你收集整理的MySQL的索引优化的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: MySQL的explain工具介绍
- 下一篇: macOS下如何使用命令启动数据库/停止