mysql时间字段不走索引_MySQL使用=或=范围查询时不走索引
2020-02-27
最近一個(gè)日志頁(yè)面查詢很慢,然后去跟蹤了查詢sql,發(fā)現(xiàn)日期字段上即使建了索引,查詢還是很慢,執(zhí)行語(yǔ)句還是使用了全表掃描,于是繼續(xù)分析下去。
查詢語(yǔ)句類似:
select * from logs where createtime >= '2020-01-01' ;
起初因?yàn)閐ate上沒(méi)檢索,查詢執(zhí)行的是全表掃描,給條件字段createtime建上索引:
create index idx_createtime on logs(createtime);
再次執(zhí)行:
expain select id, createtime from logs where createtime >= '2019-01-01' and createtime <= '2020-01-01';
查詢執(zhí)行的還是全表掃描:
網(wǎng)上查詢有說(shuō)是因?yàn)樵诓樵償?shù)據(jù)條數(shù)約占總條數(shù)五分之一以下時(shí)能夠使用到索引,但超過(guò)五分之一時(shí),使用全表掃描。于是把日期范圍縮小:
expain select id, createtime from logs where createtime >= '2020-01-01' and createtime <= '2020-02-01';
果真,查詢執(zhí)行的是range:
由此可知,在進(jìn)行范圍查詢時(shí),比如:>、< 、>=、<=等, 如果數(shù)據(jù)量過(guò)大的話,即使where條件字段已經(jīng)建立了索引,查詢語(yǔ)句執(zhí)行時(shí)還是有可能進(jìn)行全表掃描的。
實(shí)際上是不是全表的五分之一以下才會(huì)使用索引,這個(gè)不能確定,以后再研究了。
總結(jié)
以上是生活随笔為你收集整理的mysql时间字段不走索引_MySQL使用=或=范围查询时不走索引的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 论文写作——texstudio+texl
- 下一篇: java mysql读取多条数据_mye