【发布时间】:2015-09-19 02:31:43
【问题描述】:
为了帮助澄清,这里有一些代码:
方法一
SELECT * FROM tableA a
JOIN tableB b ON a.id=b.id
JOIN tableC c ON a.id=c.id
JOIN tableD d ON a.id=d.id
方法二
SELECT * FROM tableA a
JOIN tableB b ON a.id=b.id
JOIN tableC c ON b.id=c.id
JOIN tableD d ON c.id=d.id
【问题讨论】:
-
试一试并找出答案,但我怀疑它会产生很大的差异。我被告知在 WHERE 上加入两个条件会最快,但是使用 sqlserver,我认为无论如何在执行之前它都被编译成半等效的字节码。
-
感谢您的回答,但最后一部分是什么意思?
-
我的意思是,与 1980 年代不同,sql 指令没有被解释和严格遵循,而是被编译成低级代码,这些代码将执行您的指令要求的相同操作。这意味着不同的 sql 语句可以对数据库运行完全相同的代码。如果该翻译的优化部分掩盖了一种语法相对于另一种语法的任何性能优势,我不会感到惊讶。
-
@Kritner,Fabio,你SURE会有不同的结果吗?这些都是
INNER JOINs -
INNER JOINS 既是关联的又是可交换的,即顺序无关紧要,这就是查询规划器可以决定最佳顺序的原因(在许多 RDBMS 中也是如此)。另见*.com/questions/9614922/…
标签: sql sql-server join