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