我有这样的桌子
name | personal_number
-----------------------------------------
Jon | 222
Alex | 555
Jon | 222
Jimmy | 999
我需要获取每个名字,其中个人号码在表中重复超过 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,检索作为字符串连接的个人号码(类似这样'222', '222'
) 并运行其他查询
SELECT name FROM mytable WHERE personal_number IN( here joined string )
变体 2 的工作速度比变体 1 快大约 10 倍,这对我来说是个惊喜,我以为一个查询会更快,但是......
(表中有 500 000 行,列personal_number
未编入索引)
那么,您对此类案例的意思是什么?为什么变体 2 比变体 1 快很多?
正如本文中提到的,子查询似乎非常慢http://www.mysqlperformanceblog.com/2010/10/25/mysql-limitations-part-3-subqueries.
您应该尽量避免使用子查询并使用连接。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)