MySQL查询“IN”500,000条记录

时间:2012-01-03 22:47:56

标签: mysql

SELECT value FROM table WHERE id IN ("1","2","3", ... "500000")

查询内容如上所述,括号中约有500,000个值。

有更好的方法来执行搜索吗?这种方法非常麻烦/慢。

3 个答案:

答案 0 :(得分:9)

将500,000个值放入另一个表中并加入其中。

SELECT t.value
    FROM table t
        INNER JOIN NewTempTable n
            ON t.id = n.id

答案 1 :(得分:2)

你接近mysql数据包大小限制(它是16MB)所以这当然是个坏主意。

从哪个来源获得这些50万个ID?你不能将它们存储在数据库中并执行连接吗?

答案 2 :(得分:2)

您可以执行以下操作:

步骤01:制作ID表

DROP TABLE IF EXISTS lookup_ids;
CREATE TABLE lookup_ids SELECT id FROM `table` WHERE 1=2;
ALTER TABLE lookup_ids ADD PRIMARY KEY (id);

步骤02:您将所有500,000个值插入INTO lookup_ids

步骤03:在table

上制作一个合适的覆盖索引
ALTER TABLE `table` ADD UNIQUE INDEX id_value_ndx (id,value);

步骤04:执行JOIN

SELECT t.value FROM `table` t INNER JOIN lookup_ids i USING (id);

SELECT t.value FROM `table` t NATURAL JOIN lookup_ids i;

CAVEAT:除非您有一组不同的查找ID要加载,否则不需要重复步骤1-3