在加入情侣表期间的某个时候,我看到放置的条件标准在ON()子句中,有时在它之外,意味着在WHERE之后。
在大量数据中,哪种方法更优化,更快?
什么会更快 1。
SELECT a.column1, b.column2
FROM tablea a
JOIN tableb b
ON a.column3 = b.column3
WHERE b.column2='Y' AND a.column1='N'
或者这个 2。
SELECT a.column1, b.column2
FROM tablea a
JOIN tableb b
ON (a.column3 = b.column3 AND b.column2='Y')
WHERE a.column1='N'
答案 0 :(得分:6)
有两种加入方式:
1 / SQL-89-style,使用逗号分隔表和WHERE
子句
示例:
SELECT a.column1, b.column2
FROM tablea a, tableb b
WHERE a.column3 = b.column3
2 / SQL-92-style,使用JOIN ... ON
子句
示例:
SELECT a.column1, b.column2
FROM tablea a
JOIN tableb b
ON a.column3 = b.column3
92样式更现代,更受欢迎,因为在阅读查询时,连接实际上更加明显。你可以混合使用这两种风格,它会起作用,但这是一个糟糕的主意。
关于表现,我不能比an already existing answer on Stackoverflow做得更好。我会引用它的要点:
根据Peter Gulutzan和Trudy的“SQL Performance Tuning” Pelzer,在他们测试的六个或八个RDBMS品牌中,有没有 SQL-89与SQL-92的优化或性能差异 风格加入。可以假设大多数RDBMS引擎都会转换 在优化或执行之前将语法转换为内部表示 查询,因此人类可读的语法没有区别。
(强调我的)
答案 1 :(得分:0)
ON
是三元表操作<table1> JOIN <table2> ON <condition>
的一部分。此操作的结果是一个虚构的表,其中的语句可以正常工作。
WHERE
是一个过滤记录的子句。