2009-03-18 11 views

답변

2

RDBMS에 따라 다름. 두 쿼리의 실행 계획을 비교해야합니다.

오라클 10 및 11 환경에서의 실행 계획은 항상 동일합니다.

2

이론적으로 모든 하위 쿼리를 조인 쿼리로 변경할 수 있습니다.

+0

상관 관계가있는 하위 쿼리의 경우에도 마찬가지입니까? 왜 당신은 "이론적으로"자격을 얻습니까? 질문에 대한 대답을 완료 할 수 있습니까? – dkretz

3

성능 측면에서 볼 때, 최신 DB 엔진에는 성능상의 차이가 없습니다.

3

하위 쿼리의 문제점은 키가없는 하위 결과 집합을 종료 할 수 있으므로 가입하는 것이 더 비쌉니다.

가능한 경우 항상 JOIN 쿼리를 작성하고 WHERE 대신 ON 절로 필터링하십시오 (현대 엔진이 이에 맞게 최적화되어 있어야 함에도 불구하고).

2

많은 것들과 마찬가지로, 그것은 다릅니다. - 얼마나 복잡한 서브 쿼리입니까 - 서브 쿼리 실행 빈도는 얼마나됩니까

할 수 있으면 언제든지 서브 쿼리를 피하려고합니다. 특히 결과 집합의 각 항목에 대해 하위 쿼리가 실행되는 경우 큰 결과 집합이 하위 쿼리를 사용하지 않아야합니다.

테이크 관리, SQL 서버에서 알렉스

1

는 상관 하위 쿼리는 일반적으로 참가하거나, 성능을 종종 더 나은하는 파생 테이블에 조인보다 더 수행한다. 나는 여러 번 수행되어야 할 어떤 것에 대해서도 하위 쿼리를 작성하지 않습니다. 상관 관계가있는 하위 쿼리는 기본적으로 쿼리를 커서로 바꾸고 한 번에 하나의 행을 실행하기 때문입니다. 데이터베이스의 경우 일반적으로 집합 기반 방식으로 작업하는 것이 더 좋습니다.

2

"조기 최적화가 모든 악의 근원"이라는 사실을 알고 있다면 지금은 성능에 미치는 영향을 무시해 봅시다.

무엇이 더 명확하고 쉽게 유지할 것인지 선택하십시오.

5

첫 번째 원칙은 "쿼리를 정확하게 나타 내기"입니다. 두 번째 원칙은 "쿼리를 간단하고 명백하게"(보통 선택을하는 곳)입니다. 세 번째는 "쿼리를 효율적으로 처리 할 수 ​​있도록 상태를 기술하는 것"입니다.

좋은 쿼리 프로세서를 사용하는 dbms 인 경우 동일한 쿼리 디자인은 동일한 쿼리 계획 (적어도 동등한 효율)을 가져야합니다.

처음으로 MySQL을 사용했을 때 가장 큰 불만은 내가 옵티 마이저를 예상해야한다는 것을 얼마나 의식적으로 생각했는지입니다. Oracle, SQL Server, Informix 및 기타 dbms 제품에 대한 오랫동안의 경험을 통해 이러한 문제에 대한 우려는 거의 없습니다. 새로운 버전의 MySQL을 사용하면 더 좋지만, 다른 것들보다 더 자주주의를 기울일 필요가 있습니다.