我有这样的桌子
name | personal_number
-----------------------------------------
Jon | 222
Alex | 555
Jon | 222
Jimmy | 999
我需要获取每个名称,其中personal_number 在表中重复超过1,即结果必须是:
Jon
Jon
因此,变体 1):
SELECT name FROM mytable WHERE personal_number IN (
SELECT personal_number FROM mytable GROUP BY personal_number
HAVING COUNT(*) > 1
)
变体 2):
SELECT personal_number FROM mytable GROUP BY personal_number
HAVING COUNT(*) > 1
)
然后,使用 php,检索personal_numbers 作为字符串连接(类似这样'222', '222'
)并运行其他查询
SELECT name FROM mytable WHERE personal_number IN( here joined string )
变体 2 的工作速度大约比变体 1 快 10 倍,这让我感到惊讶,我认为一个查询会更快,但是......
(表中有 500 000 行,列personal_number
未编入索引)
那么,你对这种情况的意思是什么?为什么变体 2 比变体 1 快很多?