mysql中的嵌套选择加载时间
我有一张桌子 数据包包含2个字段id和total 它们都是bigint长度20和主键 唯一的id是自动递增的 每个记录中的总数=id 我有10000条记录,比如id=1-10000,total=1-10000 我得到了两个几乎相同的查询,一个在很长的加载时间内得到结果,另一个几乎立即完成 装载时间非常长: set @i = 0;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
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)
删除主键并添加索引对我来说是可行的,我已经在为另一个查询做变通,另一个查询只需创建一个索引即可工作。非常感谢你的回答,它真的为我做了这笔交易!