복붙노트

[SQL] 절은 SQL에 문제가 어디에 순서합니까?

SQL

절은 SQL에 문제가 어디에 순서합니까?

하자 내가 3 열 ID, 성, 이름, 이러한 열 중 어느 것도 색인되지 않습니다를 갖는 테이블라는 사람들이 말한다. 성이 더 독특하고, FIRSTNAME 덜 독특합니다.

나는이 검색을 수행하는 경우 :

select * from PEOPLE where FirstName="F" and LastName="L" 
select * from PEOPLE where LastName="L" and FirstName="F"

내 믿음은 더 독특한 기준 ​​(성)이 WHERE 절에 먼저 때문에 두 번째는 빠르게, 그리고 기록을보다 효율적으로 제거 얻을 것이다. 나는 최적화 첫 번째 SQL을 최적화하는 스마트 충분하다 생각하지 않습니다.

나의 이해는 맞습니까?

해결법

  1. ==============================

    1.아니, 그 순서는 중요하지 않습니다 (또는 적어도 :한다 중요하지).

    아니, 그 순서는 중요하지 않습니다 (또는 적어도 :한다 중요하지).

    모든 괜찮은 쿼리 최적화 프로그램은 가장 효율적인 방법 알아 절과 그림은 해당 쿼리를 만족시키는의 모든 부분에서 찾을 것입니다.

    나는 SQL Server 쿼리 최적화 프로그램이 적절한 인덱스를 선택할 것 알고있다 -. 당신이 당신의 두 가지 조건을 순서에 상관없이 내가 다른 RDBMS 비슷한 전략을해야합니다 가정합니다.

    어떤 문제가하는 일은이에 적합한 인덱스가 있는지 여부입니다!

    당신이 경우 SQL 서버의 경우, 가능성 인덱스를 사용합니다 :

    반면에 - 다시 SQL Server에 대한 - 당신은 테이블에서 모든 열을 잡아 SELECT *를 사용하여 테이블 오히려 작은 경우, 다음 쿼리 최적화 그냥 테이블 (또는 클러스터 된 인덱스를) 할 것입니다 좋은 기회 대신 스캔이있다 인덱스를 사용하는 (전체 데이터 페이지에 조회가 다른 모든 열을 얻을 수 있기 때문에 단지 매우 신속하게 너무 비싸 얻는다).

  2. ==============================

    2.절은 데이터베이스의 차이를해서는 안 WHERE의 순서 SQL 표준을 준수 함. 평가의 순서는 대부분의 데이터베이스에서 보장 할 수 없습니다.

    절은 데이터베이스의 차이를해서는 안 WHERE의 순서 SQL 표준을 준수 함. 평가의 순서는 대부분의 데이터베이스에서 보장 할 수 없습니다.

    순서에 대한 그 SQL의 염려를 생각하지 마십시오. 다음은 SQL 서버에 오류가 발생합니다 :

    select *
    from INFORMATION_SCHEMA.TABLES
    where ISNUMERIC(table_name) = 1 and CAST(table_name as int) <> 0
    

    이 조항의 첫 번째 부분이 먼저 실행 된 경우, 숫자 만 테이블 이름은 정수로 캐스팅 될 것이다. 그러나, SQL 서버 (다른 데이터베이스와 같이) WHERE 문에서 조항의 순서를 신경 쓰지 않는 명확한 예를 제공, 실패합니다.

  3. ==============================

    3.ANSI SQL 초안 2003 5WD-01-프레임 워크 - 2003-09.pdf

    ANSI SQL 초안 2003 5WD-01-프레임 워크 - 2003-09.pdf

    6.3.3.3 규칙 평가 순서

    ...

    우선 순위는 형식이나 괄호에 의해 결정되지 않은 경우, 식의 효과적인 평가는 일반적으로 좌측에서 우측으로 행해진 다. 그러나, 구현에 의존 피연산자 또는 사업자가 조건을 발생시키는 또는 식의 결과가 완전히 식의 모든 부분을 평가하지 않고 측정 할 수있는 경우가 발생할 수 있습니다 때 표현이 실제로 특히, 왼쪽에서 오른쪽으로 평가 여부입니다.

    여기에서 복사

  4. ==============================

    4.아니, 모든 RDBMS 먼저 쿼리를 분석하여 시작하고 최적화를 재정렬하여 where 절은.

    아니, 모든 RDBMS 먼저 쿼리를 분석하여 시작하고 최적화를 재정렬하여 where 절은.

    되는 RDBM에 따라 당신은 당신의 결과가 무엇인지 표시 할 수 있습니다 사용하는 분석 (예를 들어 오라클의 계획을 설명 검색)

    미디엄.

  5. ==============================

    5.원래 ON 문

    원래 ON 문

    난 당신이 두 번째 선택 등보다 먼저 더 선택적 열을 넣어야 할 인덱스를 만드는 동안 열 순서를 선택 이것을 혼동 같아요.

    BTW, 두 개의 쿼리 SQL 서버 최적화 위의 어떤 최적화를하지 않지만 오랫동안 계획의 총 비용이 덜 병렬 한계 비용보다만큼 Trivila 계획을 사용하십시오.

  6. ==============================

    6.그것은 이름이 인덱싱되지 않습니다 가정, 지금까지 잘 지내 사실입니다. 다른 데이터는 잘못된 생각 할 것입니다. 마다 다를 수있는, 그것을 할 수있는 방법을 찾기 위해, DBMS는 각 열에 대한 고유 한 카운트 쿼리를 실행하고 단지 으쓱하고 그것에서 얻는 것보다 더 많은 비용이 수를 비교해야합니다.

    그것은 이름이 인덱싱되지 않습니다 가정, 지금까지 잘 지내 사실입니다. 다른 데이터는 잘못된 생각 할 것입니다. 마다 다를 수있는, 그것을 할 수있는 방법을 찾기 위해, DBMS는 각 열에 대한 고유 한 카운트 쿼리를 실행하고 단지 으쓱하고 그것에서 얻는 것보다 더 많은 비용이 수를 비교해야합니다.

  7. from https://stackoverflow.com/questions/11436469/does-order-of-where-clauses-matter-in-sql by cc-by-sa and MIT license