MySQL查询";在;500000条记录
有一个类似于上面的查询,括号中有大约500000个值MySQL查询";在;500000条记录,mysql,Mysql,有一个类似于上面的查询,括号中有大约500000个值 是否有更好的搜索方式?此方法非常麻烦/缓慢。将500000个值放入另一个表中,并与之关联 SELECT value FROM table WHERE id IN ("1","2","3", ... "500000") 您接近mysql数据包大小限制(16MB),所以这肯定是个坏主意 你从哪个来源获得这50万个ID?您不能将它们存储在数据库中并执行加入吗?您可以执行以下操作: 步骤01:制作ID表 SELECT t.value FRO
是否有更好的搜索方式?此方法非常麻烦/缓慢。将500000个值放入另一个表中,并与之关联
SELECT value FROM table WHERE id IN ("1","2","3", ... "500000")
您接近mysql数据包大小限制(16MB),所以这肯定是个坏主意
你从哪个来源获得这50万个ID?您不能将它们存储在数据库中并执行加入吗?您可以执行以下操作: 步骤01:制作ID表
SELECT t.value
FROM table t
INNER JOIN NewTempTable n
ON t.id = n.id
步骤02:将所有500000个值插入查找ID
步骤03:在表上创建一个合适的覆盖索引
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);
步骤04:执行连接
ALTER TABLE `table` ADD UNIQUE INDEX id_value_ndx (id,value);
或
警告:步骤1-3不需要重复,除非您有一组不同的查找ID要加载您是如何获得500K ID的?来自另一个查询?或者它们在您的应用程序代码中的某个列表中?这50万项来自哪里?如果它们来自数据库,您可以加入
。很难想象一个用户从一个不在MySQL中的数据列表中键入500000个值:-)。我想我可以添加这些数据并加入。这会更快吗?它们是有序的和连续的吗?介于1和500000之间的是否有效?@reefine:是的,加入会更快。请参见Joe Stefanelli的答案。特别是如果您需要多次执行此操作(使用相同的ID或几乎相同的ID)
SELECT t.value FROM `table` t INNER JOIN lookup_ids i USING (id);
SELECT t.value FROM `table` t NATURAL JOIN lookup_ids i;