简体   繁体   中英

Mysql query explanation

Sometime during joining couples tables i seen that condition criterias placed are inside ON() clause, and sometime out of it, means after WHERE.

What approach is more optimized and faster in big amount of data ?

What will be faster 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'

or this one 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'

There are two ways of joining:

1/ SQL-89-style, using comma separated tables and the WHERE clause

Example:

SELECT a.column1, b.column2
FROM tablea a, tableb b
WHERE a.column3 = b.column3

2/ SQL-92-style, using the JOIN ... ON clause

Example:

SELECT a.column1, b.column2
FROM tablea a
JOIN tableb b
ON a.column3 = b.column3 

The 92 style is more modern and is preferred , because the join is actually much more visible when reading the query. You can mix both styles, and it will work, but that is a terrible idea.

About performance, I can not do better than an already existing answer on Stackoverflow . I will quote the gist of it:

According to "SQL Performance Tuning" by Peter Gulutzan and Trudy Pelzer, of the six or eight RDBMS brands they tested, there was no difference in optimization or performance of SQL-89 versus SQL-92 style joins . One can assume that most RDBMS engines transform the syntax into an internal representation before optimizing or executing the query, so the human-readable syntax makes no difference.

(emphasis mine)

ON is a part of ternary table operation <table1> JOIN <table2> ON <condition> . The result of this operation is a imaginary table with which statement works.

WHERE is a clause which filters records.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM