Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.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中的嵌套选择加载时间_Mysql_Nested_Selection_Loading - Fatal编程技术网

mysql中的嵌套选择加载时间

mysql中的嵌套选择加载时间,mysql,nested,selection,loading,Mysql,Nested,Selection,Loading,我有一张桌子 数据包包含2个字段id和total 它们都是bigint长度20和主键 唯一的id是自动递增的 每个记录中的总数=id 我有10000条记录,比如id=1-10000,total=1-10000 我得到了两个几乎相同的查询,一个在很长的加载时间内得到结果,另一个几乎立即完成 装载时间非常长: set @i = 0; SELECT * FROM packets as p1 WHERE p1.total in ( SELECT p2.total FROM packets as p2

我有一张桌子 数据包包含2个字段id和total 它们都是bigint长度20和主键 唯一的id是自动递增的 每个记录中的总数=id 我有10000条记录,比如id=1-10000,total=1-10000

我得到了两个几乎相同的查询,一个在很长的加载时间内得到结果,另一个几乎立即完成

装载时间非常长:

set @i = 0;
SELECT *
FROM packets as p1
WHERE p1.total in ( SELECT p2.total
FROM packets as p2 where ( ( @i := ( @i + 1 ) ) set @i = 0;
SELECT *
FROM packets as p1
WHERE p1.id in ( SELECT p2.id
FROM packets as p2 where ( ( @i := ( @i + 1 ) ) 装载时间非常短:

set @i = 0;
SELECT *
FROM packets as p1
WHERE p1.total in ( SELECT p2.total
FROM packets as p2 where ( ( @i := ( @i + 1 ) ) set @i = 0;
SELECT *
FROM packets as p1
WHERE p1.id in ( SELECT p2.id
FROM packets as p2 where ( ( @i := ( @i + 1 ) ) 当id和total的值相同时会发生这种情况

它们都是bigint长度20和主键

一个表中不能有两个主键

似乎您没有packets.total的索引

创建它并查看它是否有帮助:

CREATE INDEX ix_packets_total ON packets (total)

删除主键并添加索引对我来说是可行的,我已经在为另一个查询做变通,另一个查询只需创建一个索引即可工作。非常感谢你的回答,它真的为我做了这笔交易!