高效的 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 更好,你可以访问 URLhttps://***.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 查询 [重复]的主要内容,如果未能解决你的问题,请参考以下文章