高效的 MySql 查询 [重复]

Posted

技术标签:

【中文标题】高效的 MySql 查询 [重复]【英文标题】:Efficient MySql Query [duplicate] 【发布时间】:2018-06-08 16:55:49 【问题描述】:

我想设计一个查询,我想根据第一个表中的 id 从第二个表中获取名称。我可以使用以下两个查询获得结果。

请告诉我哪一个是有效的或给出快速结果的以及为什么。

SELECT r1.id, c1.categoryName
FROM request r1 
LEFT JOIN category c1
ON r1.categoryId = c1.id
order by r1.dateCreated DESC;


SELECT id, (SELECT categoryName FROM category WHERE id 
= categoryId)
FROM request r1
order by dateCreated DESC;

【问题讨论】:

你可以使用第一个查询,因为 JOIN 比 Sub Query 更好,你可以访问 URL https://***.com/questions/2577174/join-vs-sub-query 最好使用第一个。随着记录数量的增加,子查询会增加服务器负载。 从现在开始我将使用连接而不是子查询。谢谢。 子查询需要更多时间而不是连接。所以第一个很好 【参考方案1】:

通常,显式连接是更快的方法,因为优化更好,但现在优化器一直在变得更好,因此您可以尝试使用更具可读性的 SQL 查询。

您可以在手册中找到此内容(13.2.10.11 将子查询重写为连接):https://dev.mysql.com/doc/refman/5.7/en/rewriting-subqueries.html

它说“LEFT [OUTER] JOIN 可以比等效的子查询更快,因为服务器可能能够更好地优化它”。

但在复杂的情况下我更喜欢子查询,它们的可读性更高,你的 SQL 也会更易于维护,子查询是解决问题的逻辑正确方法。

【讨论】:

以上是关于高效的 MySql 查询 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 性能:嵌套插入/重复键与多次更新

mysql查询时如何去除重复数据

mysql 查询怎么去除重复列

mysql联表查询出现重复数据怎么解决

mysql 如何去除表连接查询出来的重复数据

MySQL中提取重复记录的查询是啥[重复]