복붙노트

[SQL] SQL - 조건이 문제가 WHERE의 순서를합니까?

SQL

SQL - 조건이 문제가 WHERE의 순서를합니까?

그 CATEGORY_ID 테이블 책의 인덱스 키 (기본 키) 가정합니다. 다음과 같은 두 개의 SQL 문 사이에 어떤 차이가 있나요?

SELECT * FROM books WHERE author='Bill' AND category_id=1

SELECT * FROM books WHERE category_id=1 AND author='Bill'

I는 빨리 역순으로 필터링 이상의 저자에 의해 처음 CATEGORY_ID하여 다음 기록을 필터링 같아요. SQL 엔진은이 방법을 수행하는 스마트 충분히 있습니까?

해결법

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

    1.아니, WHERE 절 순서는 중요하지 않습니다.

    아니, WHERE 절 순서는 중요하지 않습니다.

    옵티마이 저는 쿼리를 리뷰 및 인덱스와 같은 기준으로 데이터를 얻을 수있는 최선의 방법을 결정합니다. 거기 CATEGORY_ID 저자 컬럼에 포함하는 인덱스하더라도 - 중 하나를 사용하도록 기준을 만족 것 (가정 더 나은 무언가가 아니다).

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

    2.SQL은 선언적이다.

    SQL은 선언적이다.

    귀하의 예제에서는, 당신은 지금 (이성과 주제를 벗어 것 "비용"내에서) 그렇게하기 위해 최선의 방법을 작동합니다 ... 당신이 원하는 엔진 / 최적화 말했습니다.

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

    3.일반적으로, 아니, 당신이 현대적인 데이터베이스를 사용하는 가정 반면. 아마 10 년 전, 확실히 그 다음 중요.

    일반적으로, 아니, 당신이 현대적인 데이터베이스를 사용하는 가정 반면. 아마 10 년 전, 확실히 그 다음 중요.

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

    4.최적화 프로그램이 데이터를 가져 오는위한 최선의 방법을 결정할 것 같은 즉, 아니, 그들은 상관하지 않습니다.

    최적화 프로그램이 데이터를 가져 오는위한 최선의 방법을 결정할 것 같은 즉, 아니, 그들은 상관하지 않습니다.

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

    5.예, SQL은 선언적 언어입니다. 그러나 SQL Server의 (하지 않도록 다른 엔진에 대한) DBA는 실제로 (좀) SQL 쿼리 스토어에서 실행 계획을 강제로,이 작업을 수행 할 수 있습니다.

    예, SQL은 선언적 언어입니다. 그러나 SQL Server의 (하지 않도록 다른 엔진에 대한) DBA는 실제로 (좀) SQL 쿼리 스토어에서 실행 계획을 강제로,이 작업을 수행 할 수 있습니다.

    하지만, 그래, 당신은 당신의 응용 프로그램에서 또는 쿼리 텍스트 자체 내에서 그것을 제어 할 수 없습니다.

    추신 2 개 센트 : 당신이 강제 ORDER를 사용하여 가입의 순서를 제어 할 수 있습니다.

  6. from https://stackoverflow.com/questions/3152182/sql-does-the-order-of-where-conditions-matter by cc-by-sa and MIT license