【问题标题】:How to force Mysql to use primary Index in IN clause...?如何强制 Mysql 在 IN 子句中使用主索引...?
【发布时间】:2012-05-23 20:33:07
【问题描述】:
    Query1. SELECT * FROM traffic WHERE id IN (1904817,1904699,1882859);

    Query2. SELECT * FROM traffic WHERE id IN 
            (SELECT id FROM data_table where condition=1);

这里的流量表有近百万条记录,id是主键。

使用索引id查询1

在 Query2 中它没有使用索引。

如何有效地运行 Query2...通过使用索引...

【问题讨论】:

    标签: mysql sql indexing where-in


    【解决方案1】:

    使用inner join 代替IN 并在condition column 上创建另一个索引:

    select t.* from traffic t
    inner join data_table d on t.id = d.id and d.contition = 1
    

    【讨论】:

      【解决方案2】:

      通过指定 USE INDEX (index_list),您可以告诉 MySQL 仅使用一个命名索引来查找表中的行。

      SELECT * FROM traffic USE INDEX (ID_INDEX) WHERE id IN 
                  (SELECT id FROM data_table where condition=1);
      

      【讨论】:

      • 有可能 MySQL 将继续将子查询视为依赖,因此将继续具有糟糕的性能,尽管...
      • 请分享你的执行计划。
      【解决方案3】:

      还有野蛮的方式:SELECT * FROM traffic, data_table WHERE traffic.id=data_table.id

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-11-01
        • 2010-10-09
        • 2018-12-18
        • 2011-10-11
        • 2018-01-17
        • 2019-11-29
        • 1970-01-01
        • 2020-04-18
        相关资源
        最近更新 更多