SELECT value FROM table WHERE id IN ("1","2","3", ... "500000")
有一个类似上面的查询,括号中的值约为500,000。MySQL Query“IN”500,000条记录
有没有更好的方法来执行搜索?这种方法非常麻烦/缓慢。
SELECT value FROM table WHERE id IN ("1","2","3", ... "500000")
有一个类似上面的查询,括号中的值约为500,000。MySQL Query“IN”500,000条记录
有没有更好的方法来执行搜索?这种方法非常麻烦/缓慢。
将500,000个值放入另一个表中并加入它。
SELECT t.value
FROM table t
INNER JOIN NewTempTable n
ON t.id = n.id
你已经接近mysql数据包大小限制(它是16MB),所以这肯定是个坏主意。
从哪个来源获得这些50万个ID?你不能将它们存储在数据库中并执行连接吗?
你可以做到以下几点:
步骤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的加载
你是怎么500K的IDS ?从另一个查询?或者他们在应用程序代码中的某个列表中? – 2012-01-03 22:49:45
这些500,000项目来自哪里?如果它们源自数据库,则可以“加入”。很难想象用户输入了500,000个值:-) – drdwilcox 2012-01-03 22:50:33
来自不在MySQL中的数据列表。我想我可以添加这些数据并加入JOIN。这会更快吗? – reefine 2012-01-03 22:51:02