加入与子
我是一个老派的MySQL用户,并且总是首选JOIN
子查询。 但是现在每个人都使用子查询,我讨厌它,我不知道为什么。
我缺乏理论知识来判断自己是否有任何区别。 子查询和JOIN
一样好,因此没有什么可担心的?
从手册中获取(13.2.10.11将子查询重写为Joins):
LEFT [OUTER] JOIN可以比等效的子查询更快,因为服务器可能能够更好地优化它 - 这不仅仅是MySQL Server特有的事实。
所以子查询可能比左[OUTER] JOINS慢,但在我看来,它们的强度略高于可读性。
子查询是解决表格问题的逻辑正确方法,“从A得到事实,以B的事实为条件”。 在这种情况下,在子查询中使用B比合并更合理。 从实际意义上讲,这也更安全,因为您不必因为与B多重匹配而从A中获得重复的事实而持谨慎态度。
但实际上,答案通常取决于表现。 有些优化器在给出一个连接与一个子查询时吸引了柠檬,有些则以另一种方式吸引了柠檬,这是针对特定优化器的DBMS特定版本和特定于查询的问题。
从历史上看,显式连接通常会赢,因此连接的确切智慧总是更好,但优化器一直在变得更好,所以我宁愿先以逻辑上一致的方式编写查询,然后在性能约束条件允许时重新进行重构。
在大多数情况下, JOIN
比子查询快,子查询速度更快。
在JOIN
RDBMS可以创建一个更适合您的查询的执行计划,并且可以预测应该加载哪些数据进行处理并节省时间,与子查询不同,它将运行所有查询并加载所有数据以执行处理。
子查询中的好处在于它们比JOIN
更具可读性:这就是为什么大多数新SQL人员更喜欢它们; 这是简单的方法; 但是当涉及到性能时,JOINS在大多数情况下都更好,尽管它们也不难读取。
上一篇: Join vs. sub
下一篇: Configuring SP to send assertions to IDP (PingFederate SAML 2.0)