Mysql查询说明

时间:2012-02-08 16:43:11

标签: mysql optimization

在加入情侣表期间的某个时候,我看到放置的条件标准在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'

2 个答案:

答案 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是一个过滤记录的子句。