【问题标题】:MySQL date range query indexing is working for limited range onlyMySQL 日期范围查询索引仅适用于有限范围
【发布时间】:2021-02-02 12:21:35
【问题描述】:
EXPLAIN EXTENDED 
SELECT * FROM table_name
where dummy_date 
between '2020-12-01' AND '2020-12-31'
-- between '2020-12-01' AND '2020-12-20'
AND name='something';
ALTER TABLE `table_name` ADD INDEX `dummy_date_index`(`dummy_date`);

如果 dummy_date 介于 20-25 天之间,则查询使用了 700,000 条记录的索引,但如果超过 25 天,则查询不使用索引并进行全表扫描。请让我知道使用索引的正确方法。

【问题讨论】:

标签: mysql sql database database-administration


【解决方案1】:
INDEX(name, dummy_date)

会更好。

优化器避免使用选择性不高的索引是正确的。使用索引有开销。在表扫描期间跳过行也有开销。优化器必须选择“两害相权取其轻”;有时它不会选择正确的“较小”。

【讨论】:

  • 但大多数记录的名称列值相似。
  • @ashutoshkumar - 这没关系。为了有效,请将= 列放在首位。在第一个 range 列之后,将不再查看其他内容。
猜你喜欢
  • 1970-01-01
  • 2014-01-07
  • 2011-01-01
  • 2018-03-27
  • 2018-05-24
  • 2020-10-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多