Mysql 哪个SQL语句更有效?

Mysql 哪个SQL语句更有效?,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”,那么

我在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;

---编辑---

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

这样,在将来进行开发时,我可以知道哪个查询更好


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

我想说第一个,但是你可以通过SQL分析器来发现。例如,如果您使用MS SQL,则SQL Server探查器随数据库一起提供。

我会说第一个,但您可以通过SQL探查器找到答案。例如,如果使用MS SQL,SQL Server Profiler随数据库一起提供。

根据someActivityTable的列数,它可以是第一列,因为在第二列中,您选择的是所有数据:

SELECT * FROM someActivityTable WHERE userId = 100

尽管这与使用第一个几乎相同。

根据someActivityTable的列数,它可以是第一个,因为在第二个表中,您选择的是所有数据:

SELECT * FROM someActivityTable WHERE userId = 100

尽管这几乎和你应该使用第一个一样。

选择第一个,因为它是直截了当的。 过早优化是万恶之源

只要没有真正的性能问题,就要简单明了。当您遇到性能问题时,请向我们说明每项声明所花费的计划和时间

如果您真的了解productoin的性能,那么您必须在它投入生产之前对其进行测试。在投入生产之前,您可以通过在测试系统上填充数据来进行分析


从开发人员的角度来看,第一条更好,因为它不像第二条语句那样容易出错,而且更直截了当。保持简单

选择第一个,因为它是直截了当的。 过早优化是万恶之源

只要没有真正的性能问题,就要简单明了。当您遇到性能问题时,请向我们说明每项声明所花费的计划和时间

如果您真的了解productoin的性能,那么您必须在它投入生产之前对其进行测试。在投入生产之前,您可以通过在测试系统上填充数据来进行分析


从开发人员的角度来看,第一条更好,因为它不像第二条语句那样容易出错,而且更直截了当。保持简单

没有最有效的语句,因为

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

最有效的语句可能会根据数据量、索引的存在以及这些索引的基数而变化,因此对于相同结构的表来说,今天早上最有效的选择可能与明天不同


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

没有最有效的语句,因为

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

最有效的语句可能会根据数据量、索引的存在以及这些索引的基数而变化,因此对于相同结构的表来说,今天早上最有效的选择可能与明天不同


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

我的直觉是左连接应该更快,但我现在不能用任何东西来支持它,所以我会让其他人回答;第一条sql语句中的EXPLAIN显示使用索引U和using键访问这两个表。第二条sql语句中的EXPLAIN显示使用索引U和using键访问这两个表,第三行没有使用任何键。所以我不明白的是为什么一些程序员坚持用第二种方式编写它。我的直觉是左连接应该更快,但我现在不能用任何东西来支持它,所以我会让其他人回答;第一条sql语句中的EXPLAIN显示,这两个表都是使用索引U(使用主索引)和S上的using key.EXPLAIN访问的
第二个sql语句显示,这两个表都是使用索引U访问的,索引U使用主索引,索引U使用一个using键,第三行不使用任何键。所以我不明白的是,为什么一些程序员坚持在第二个wayWell中编写它。我使用的是MySQL。而且它没有附带任何利润器:哦,很好。通常我只是解释一下,然后试着从结果中做出正面或反面的解释。。。谢谢。MySQL查询分析器-我正在使用MySQL。而且它没有附带任何利润器:哦,很好。通常我只是解释一下,然后试着从结果中做出正面或反面的解释。。。谢谢。MySQL查询分析器-假设两个表都有数百万条记录。每个用户至少有500个活动?有这么多记录,我想测试一下。但要像@juergend said和用户sqlprofiler那样测试它:假设两个表都有数百万条记录。每个用户至少有500个活动?有这么多记录,我想测试一下。但要像@juergend said和用户SQL profiler那样对其进行测试: