더 빠른 가입입니다


12

어느 것이 더 빠릅니다

SELECT * FROM X INNER JOIN Y ON x.Record_ID = y.ForignKey_NotIndexed_NotUnique

또는

SELECT * FROM X INNER JOIN Y ON y.ForignKey_NotIndexed_NotUnique = x.Record_ID

답변:


17

차이점은 없습니다. mssql (및 대부분의 데이터베이스 엔진)의 쿼리 엔진은 둘 다에 대해 동일한 쿼리 계획을 작성합니다. SQL Workbench에서 예상 및 실제 쿼리 계획을 확인하여이를 확인할 수 있습니다.


10

옵티마이 저는 동일한 JOIN이므로이를 무시합니다.

SQL은 절차 적이 아니라 선언적이며 쿼리는 행 단위가 아닌 토토로 평가됩니다.


4

자신의 데이터를 사용하여 질문에 답하는 테스트를 작성하는 것은 어떻습니까?

데이터베이스 프로그래밍에 대해 한 가지만 배우면 모든 솔루션에 맞는 단일 크기가없는 경우가 종종 있습니다. 물론 모범 사례가 있지만 전반적으로 항상 사례입니다.

내가 말하는 이유는 관계 데이터베이스 쿼리를 사용하는 경우 하나의 크기가 모든 접근 방식에 적합하지 않기 때문입니다. 데이터를 처리하는 방법을 결정하는 플래너가 있기 때문에 플래너가 주어진 시간에 사용 가능한 정보를 사용하여 선택한 것에 따라 동일한 쿼리가 빠르게 켜지거나 느려질 수 있습니다. 예를 들어, 데이터를 검색하거나 삽입하는지 여부와 쿼리를 실행하는 동안 다른 사람이 시스템을 사용하는 방식에 따라 인덱스가 가장 친한 친구 인 경우가 있습니다. 따라서 항상이 쿼리가 어떻게 수행되는지 유스 케이스에 맞는 테스트를 작성하는 것이 좋습니다. 그럼에도 불구하고 결과는 시간이 지남에 따라 달라질 수 있으며 데이터 및 사용량이 변경됨에 따라 다시 최적화됩니다.

나는 당신이 stackoverflow에서 얻을 수있는 답변은 당신의 환경 만 제공 할 수있는 실제 답변이 아닌 교과서 답변이 될 것이라고 생각합니다. 그리고 결국 그것은 실제 결과입니다.

이제 여기에 표시하는 간단한 쿼리는 모두 성능이 동일해야합니다. 그러나 그때조차도 당신이 질문을하면 그것을 테스트하고 증명한다고 말합니다. 나는 내 것을 포함한 모든 사람이 대답하기 전에 결과를 신뢰할 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.