mysql - 哪种SQL语句效率更高?

标签 mysql sql

我在 MySQL 数据库中有这样的表...

CREATE TABLE `someUserTable` 
(
userId INT NOT NULL,
.....
PRIMARY KEY(userId), 
);

CREATE TABLE `someActivityTable` 
(
activityId INT NOT NULL
userId INT,
.....
PRIMARY KEY(activityId),
KEY(userId) 
);

如果我想找到一个用户的所有事件(比如“100”),是否更有效

SELECT * 
FROM someUserTable U 
LEFT JOIN someActivityTable A ON A.userId = U.userId 
WHERE U.userId = 100;

SELECT * 
FROM someUserTable U 
LEFT JOIN 
(SELECT * FROM someActivityTable WHERE userId = 100) A ON A.userId = U.userId 
WHERE U.userId = 100;

-----编辑-----

使用分析器会告诉我什么是最适合当前情况的。但我感兴趣的是这两个查询背后的理论。

方便以后做开发的时候知道哪个查询更好。

否则,我需要等到应用程序投入生产并且数据库开始填满后才能进行准确的分析。到那个时候,可能已经太晚了。

最佳答案

没有所谓“最有效”的语句,因为

  1. SQL 查询优化器的功能类似于黑匣子,它根据许多数据点做出决策,这些决策可能无法预测,甚至可能看起来不一致。

  2. 最有效的语句可能会根据数据量、索引的存在以及这些索引的基数而改变,因此对于结构相同的表,今天早上的“最有效”选择明天可能会有所不同。

然而,在这种情况下,我们可以说版本 1 优于版本 2,因为它更短、更容易理解,并且不包含重复的过滤逻辑。坚持使用版本 1,除非并且直到您确定版本 2 是必要的性能改进。

关于mysql - 哪种SQL语句效率更高?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8180346/

相关文章:

php - Codeigniter 通过 Ajax/Jquery 分页问题

mysql - JPA 和 Hibernate - 复合主键与外键

mysql - 两个日期范围之间有多少相等的天数,SQL

mysql - 查询中按两列获取最新记录

python - 从多个没有外键的表中选择数据?

MySQL DATETIME DIFF 查询

mysql查询仅获取同一类别中的帖子并且它们具有相同的标签-Wordpress

c# - 连接字符串问题

SQL Server 删除脚本顺序

php - SQL 将所有 .JPG 设置为 .PNG