2016-11-17 1 views
2

나는 다음과 같은 테이블이있는 경우 :내부에 JOIN ON 절이 있습니까?

table_a

id | name |tbl_b_key| status 
-----+---------+---------+-------- 
0 | a | 1 | 0 
1 | b | 2 | 0 
2 | c | 3 | 1 

table_b

id | type | status 
-----+---------+--------- 
0 | a | 0 
1 | b | 0 
2 | b | 1 
3 | a | 1 

이 두 쿼리 간의 성능면에서 어떤 차이가 있습니까?

SELECT table_a.name, table_b.type FROM table_a JOIN table_b ON (table_a.status = table_b.status AND table_b.type = a); 

SELECT table_a.name, table_b.type FROM table_a JOIN table_b ON (table_a.status = table_b.status) WHERE table_b.type = a; 

내 이해 첫 번째 쿼리는 다음 조인 어디에 수행 못하다 결합되는 열의 양을 감소로서 첫 번째 질의가 빠르게 될 것이다. 아니면 둘 사이에 실제 차이점이 있습니까?

편집 : 지적한대로 내 첫 번째 쿼리에서 실수를했습니다. 이제 수정되었습니다.

+2

무슨 말을 EXPLAIN는 무엇입니까? SHOW WARNINGS로 EXPLAIN EXTENDED를 따르는 것이 무엇보다 좋습니다. 말하다?? – Strawberry

+1

첫 번째 문법 오류,'... ON (table_a.status = table_b.status AND table_b.type = a)'을 의미합니까? – mata

+0

@mata : 거기에 수정했다, 당신은 옳았다. – Peck3277

답변

2

두 개의 쿼리는 동일합니다. 차이점이 없습니다.


당신이 비교하려는 두 개의 유효한 쿼리가있을 때, 당신은 MySQL을 사용하는 실행 계획을 보려면 각에 EXPLAIN를 실행할 수 있습니다.

그리고 각 쿼리를 실행하여 성능을 측정 할 수 있습니다. (각 실행에 대한 경과 시간을 측정, MySQL의 쿼리 캐시를 거치지 않고, 각 쿼리를 여러 번 실행하고 첫 번째 실행을위한 시간을 밖으로 던져.) 일반적으로


, MySQL은 불필요한 괄호를 무시합니다. 술어는 술어이고 술어는 술어입니다. INNER JOIN 조건의 WHERE 절 또는 ON 절에 있는지 여부는 중요하지 않습니다. 우리는 그 다른 형태의 모든에 EXPLAIN를 실행할 수 있습니다

... a JOIN b ON a.foo = b.foo AND b.bar = '1' WHERE ... 

    ... a JOIN b ON (a.foo = b.foo AND b.bar = '1') WHERE ... 

    ... a JOIN b ON a.foo = b.foo WHERE b.bar = '1' AND ... 

    ... a JOIN b ON (a.foo = b.foo) WHERE b.bar = '1' AND ... 

    ... a JOIN b WHERE a.foo = b.foo AND b.bar = '1' AND ... 

, 우리는 정확한 같은 실행 계획을 볼 수 있습니다 : MySQL은 같은

MySQL이 상당 이러한 형태의 모두를보고 그것을 본다. 우리는 성과의 차이를 기대하지 않습니다.

(AN 외부로는 술어 사이의 차이가 ON 절과 WHERE 절에있다, 가입 할 수 있습니다.)

+0

상세한 고장에 감사드립니다. 이 기사를 통해 EXPLAIN 명령을 설명하는 데 도움이되었습니다. https://www.sitepoint.com/using-explain-to-write-better-mysql-queries/ 이 주제에 대해 더 자세히 배우는 데 도움이되는 자료가 있습니까? – Peck3277

+0

EXPLAIN의 진정한 힘은 MySQL 옵티마이 저가 수행 할 수있는 연산과 SQL 연산이 영향을 미치거나 금지하는 연산을 이해하는 데 있습니다. http://dev.mysql.com/doc/refman/5.7/en/select-optimization.html – spencer7593