Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL查询";在;500000条记录_Mysql - Fatal编程技术网

MySQL查询";在;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个值


是否有更好的搜索方式?此方法非常麻烦/缓慢。

将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;