我编写了两个返回相同结果的查询,但我希望使用性能更好的查询
SELECT ID, INTERESTS
FROM users
WHERE CITY = (SELECT CITY FROM users WHERE ID = 124)
SELECT b.ID, b.INTERESTS
FROM users a, users b
WHERE a.CITY = b.CITY AND a.ID = 124
最佳答案
首先,您应该停止在 FROM
子句中使用带逗号的过时语法。简单规则:永远不要在FROM
子句中使用逗号; 始终使用显式JOIN
语法。
其次,最好通过检查系统上数据的性能来解决性能问题。
您的第二个查询正确写为:
SELECT b.ID, b.INTERESTS
FROM users a JOIN
users b
ON a.CITY = b.CITY AND a.ID = 124 ;
这应该具有良好的性能。有时EXISTS
可以有稍微更好的性能:
select u2.*
from users u
where exists (select 1 from users u where u.city = u2.city and and u.id = 124);
关于两种选项之间的 MySQL 查询性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36069995/