链接表或子查询?

时间:2011-06-24 16:28:33

标签: sql

我正在查找编写查询的不同方法,我只是想知道您认为哪种方式更适合使用以下选项:

SELECT a.salary 
  FROM emp a
  JOIN emp b ON a.salary < b.salary
 WHERE b.id = 200

SELECT salary 
  FROM emp
 WHERE salary < (SELECT salary 
                   FROM emp 
                  WHERE id = 200)

我在表格中执行了大约300条记录的执行时间,它们大致相同,所以这更多地是关于偏好和接受的标准。我个人更喜欢第二种方式(更容易阅读给我)。我觉得第一是标准的。你们都在想什么?

2 个答案:

答案 0 :(得分:3)

我不认为这个问题有一个明确的答案,因为它实际上取决于查询本身的上下文。 RDMS。

因此,在您的情况下,您已经完成了300条记录的研究。 3,000,000怎么样?这有什么不同吗?

我个人喜欢Joins over Sub-Queries,如果我可以帮助的话,但就像我说的那样,这是根据具体情况确定的。

答案 1 :(得分:1)

SQL是一种声明性语言,广义意味着您告诉数据库您想要什么,以及数据库决定如何最好地获取它。

出于这个原因,编写查询的方式很多,其目的是使其目标最明显/可读(这就是为什么子查询在这里有意义)。

但是,并非所有RDBMS都是相同的,并且查询优化器能够“等同”技术上相同但编写方式不同的查询的能力因db而异。

例如,MySQL只有一个嵌套循环连接算法,在处理大型数据集的子查询时可能会出现问题。您将不得不尝试使用不同的数据集,看看优化器在幕后做了什么。