两种选项之间的 MySQL 查询性能

标签 mysql sql

我编写了两个返回相同结果的查询,但我希望使用性能更好的查询

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/

相关文章:

mysql - 如何向 SQL 查询中的列添加值?

mysql - 优化排序查询

php - 由于点符号,无法在查询中指定我的表名

javascript - MySQL : Create table comparison product

php - 使用ionic2将图像插入Mysql数据库

mysql - 内部连接与右表的空结果

java - 如何一键删除数据库中的所有行

sql - 具有多列数据的 postgresql 数据透视表

PHP-MySQL : Get rows from table where date between two dates

sql - 从 VB.net 中的数据表中选择条件