如何在这个sql语句上创建索引?

时间:2017-04-11 07:46:36

标签: mysql indexing

EXPLAIN 
select * 
  from goods 
 where start_time <= 1491894088 
   and end_time > 1491894088 
   and type = 2 

ID:1

SELECT_TYPE:简单

表:good_price

类型:所有

possible_key:编

键:空

行:2345(全部)

我试过make index(start_time,end_time,special_type),但是它不起作用, 有任何想法吗?感谢

1 个答案:

答案 0 :(得分:0)

无法完成。部分解决方案是

INDEX(special_type, start_time)
INDEX(special_type, end_time)

优化程序在选择其中一个查询后会

  1. 查看special_type = 2的索引(1491894088)
  2. 向前(或向后)扫描以查找其一侧的所有行
  3. 到达数据以检查另一端。
  4. 这个可能稍微好一点(由于ICP),但我不确定:

    INDEX(special_type, start_time, end_time)
    INDEX(special_type, end_time, start_time)
    

    请为您尝试的任何配方提供SHOW CREATE TABLEEXPLAIN SELECT...。这将有助于我们了解索引是否有帮助。

    special_type=2的频率如何?

    注意:我在索引中放置了special_type ,因为优化器停止使用索引在达到范围(start_time之后无法使用你试过的一个。)

    More on building an index.