2013-03-27 7 views
1

성능 다음 두 쿼리 간의 차이점이 있습니까?"AS"가 아닌 "AS"의 MySQL 성능 "

SELECT * FROM users AS u LEFT JOIN parents AS p ON u.id=p.user_id 

SELECT * FROM users u LEFT JOIN parents p ON u.id=p.user_id 

+1

아니요, 같은 것. – Bridge

+0

quey는 성능 차이가 없다고 생각합니다. 그러나 첫 번째 쿼리는 더 나은 접근 방법입니다. – Shin

+0

잠재적 인 중복 http://stackoverflow.com/questions/8363108/how-does-table-alias-names-affect-performance –

답변

2

:에 의해

측정은을 아는 것입니다. 정말로 프로파일 러와 측정을 실행하고 싶다면. 그렇지 않으면 우리에게서 가져 가라 : 당신이 지금까지 그것에 대해 생각한 가치가 없다. A)의 MySQL의 결함으로 고려되어야 모두에서 (상당한 양의) 차이있다 경우

는, b)는 무시할 수 따라서 일부가 아닌 쿼리 실행 부분을 구문 분석 쿼리 시 문제와 어쨌든 구문 분석보다는 실행이 전체 "쿼리 시간"의 99.99999 %를 차지합니다 (그 이상이라면).

측정 가능한 차이가있다 경우 사용자가 일반적으로 나노초 단위로 속도 향상을 통지하지 않기 때문에 그 차이에 대해 귀찮게 가치가없는) 매우, 매우, 매우 작고, 따라서해야합니다 B) 엄격한 루프에서 수천 개의 쿼리를 실행할 때만 눈에.니다.

MySQL의 기여자가 엉망이되지 않았다면 AS 키워드는 읽기 쉽도록 존재하기 때문에 아무런 차이가 없습니다. 유일한 방법은 을 확실히 알고를 프로파일하는 것입니다. 이상한 버그 나 동작이 소프트웨어에서 처음으로 나타나는 것은 아닙니다. 그러나 AS 키워드가 이전에 당신이 가진 수백만 명의 MySQL 사용자에 의해 오래전에 발견되었을 것이기 때문에 키워드가 전혀 달라지지 않는다고 가정하는 것은 매우 안전합니다 (또는 그 누구도 절대 사용하지 않았습니다). 귀찮게, 너는 결코 알지 못한다 Puh). 이 "질문"을 프로파일 링하는 데 시간을 할애하면 IMHO는 시간 낭비입니다.

rules of Optimization club을 읽으십시오.

실제로 인 경우에만 최적화 할 장소를 찾기 시작합니다. 그리고 "적게 걸린 과일"이나 상당한 부하 (I/O, CPU, 네트워크 등)를 설명하는 항목 만 최적화합니다. 성능 향상을 위해 키워드를 제거하는 쿼리 최적화는 버그 (버그/문제가없는)에 대한 투자를 절대로, 결코 반환하지 않는 미세 최적화입니다.귀하의 질문은 (그리고해야한다) 등 오히려 추측보다 프로파일을 사용하여 하드 데이터, 다른 사람의 의견을 수립하여 답변을 얻을 수 있습니다 불구하고 "사고 실험"으로


나는는 querycaches 같은 물건을 떠나지 않았다 은 쿼리가 실행될 때마다 (또는 오히려) 쿼리 실행 계획을 (불필요하게) 다시 만들거나 쿼리 캐시를 사용할 수 없도록 할 때마다 AS 키워드를 사용하거나 사용하지 않고 쿼리가 실행될 때마다 서로 다른 위치에서 실행됩니다. 재사용 할 수 있습니다. 그러나 이제 우리는 정말로 여기 가장자리 사건을 말하고 있습니다.이 말은 다시 말하자면 : 측정 알고있는 것입니다.

1

진짜로 동일합니다 (두 번째는 AS가 없습니다).

AS 키워드는 선택 사항입니다. LEFT JOINLEFT OUTER JOINOUTER 키워드와 같습니다.

0

식별자가있는 select_expr에 별명을 지정할 경우 AS 키워드는 (선택 사항)입니다. 그러나 AS는 선택 사항이므로 선택 사항입니다. MySQL은 두 번째를 별칭 이름으로 해석합니다. 이 때문에 열 별칭을 지정할 때 AS를 명시 적으로 사용하는 습관이있는 것이 좋습니다. 모두와 마찬가지로 http://dev.mysql.com/doc/refman/5.0/en/select.html#idp56626352