2
    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是主键。

Query1 使用索引id

与 Query2 一样,它没有使用 index 。

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

4

3 回答 3

6

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

select t.* from traffic t
inner join data_table d on t.id = d.id and d.contition = 1
于 2012-05-16T09:39:03.740 回答
2

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

于 2012-05-16T09:42:10.240 回答
1

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

SELECT * FROM traffic USE INDEX (ID_INDEX) WHERE id IN 
            (SELECT id FROM data_table where condition=1);
于 2012-05-16T09:39:46.233 回答