0

我有一个表数据包数据
包包含 2 个字段 id 和总计
它们都是 bigint 长度 20 并且只有主键id 在每条记录
中自动递增总计 = id 我有 10000 条记录让我们说 id = 1 - 10000 和总计 = 1 - 10000


我得到了 2 个几乎相同的查询 1 个导致加载时间非常长,一个几乎立即完成。

加载时间非常长:

设置@i = 0; 
SELECT *
FROM packet as p1
WHERE p1.total in ( SELECT p2.total
FROM 数据包为 p2 where ( ( @i := ( @i + 1 ) )

加载时间非常短:

设置@i = 0; 
SELECT *
FROM packet as p1
WHERE p1.id in ( SELECT p2.id
FROM 数据包为 p2 where ( ( @i := ( @i + 1 ) )

当 id 和 total 的值相同时会发生这种情况。

4

1 回答 1

0

它们都是 bigint 长度 20 和主键

一个表中不能有两个主键。

你好像没有索引packets.total

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

CREATE INDEX ix_packets_total ON packets (total)
于 2009-04-06T20:28:41.110 回答