2012-01-03 96 views
2
SELECT value FROM table WHERE id IN ("1","2","3", ... "500000") 

有一个类似上面的查询,括号中的值约为500,000。MySQL Query“IN”500,000条记录

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

+0

你是怎么500K的IDS ?从另一个查询?或者他们在应用程序代码中的某个列表中? – 2012-01-03 22:49:45

+1

这些500,000项目来自哪里?如果它们源自数据库,则可以“加入”。很难想象用户输入了500,000个值:-) – drdwilcox 2012-01-03 22:50:33

+0

来自不在MySQL中的数据列表。我想我可以添加这些数据并加入JOIN。这会更快吗? – reefine 2012-01-03 22:51:02

回答

9

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

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

你已经接近mysql数据包大小限制(它是16MB),所以这肯定是个坏主意。

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

2

你可以做到以下几点:

步骤01:制作标识的表

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:插入所有500000个值到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; 

警告:步骤1-3,不需要重复,除非你有一组不同的查找ID的加载