[SQL] SQL - 조건이 문제가 WHERE의 순서를합니까?
SQLSQL - 조건이 문제가 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.아니, WHERE 절 순서는 중요하지 않습니다.
아니, WHERE 절 순서는 중요하지 않습니다.
옵티마이 저는 쿼리를 리뷰 및 인덱스와 같은 기준으로 데이터를 얻을 수있는 최선의 방법을 결정합니다. 거기 CATEGORY_ID 저자 컬럼에 포함하는 인덱스하더라도 - 중 하나를 사용하도록 기준을 만족 것 (가정 더 나은 무언가가 아니다).
-
==============================
2.SQL은 선언적이다.
SQL은 선언적이다.
귀하의 예제에서는, 당신은 지금 (이성과 주제를 벗어 것 "비용"내에서) 그렇게하기 위해 최선의 방법을 작동합니다 ... 당신이 원하는 엔진 / 최적화 말했습니다.
-
==============================
3.일반적으로, 아니, 당신이 현대적인 데이터베이스를 사용하는 가정 반면. 아마 10 년 전, 확실히 그 다음 중요.
일반적으로, 아니, 당신이 현대적인 데이터베이스를 사용하는 가정 반면. 아마 10 년 전, 확실히 그 다음 중요.
-
==============================
4.최적화 프로그램이 데이터를 가져 오는위한 최선의 방법을 결정할 것 같은 즉, 아니, 그들은 상관하지 않습니다.
최적화 프로그램이 데이터를 가져 오는위한 최선의 방법을 결정할 것 같은 즉, 아니, 그들은 상관하지 않습니다.
-
==============================
5.예, SQL은 선언적 언어입니다. 그러나 SQL Server의 (하지 않도록 다른 엔진에 대한) DBA는 실제로 (좀) SQL 쿼리 스토어에서 실행 계획을 강제로,이 작업을 수행 할 수 있습니다.
예, SQL은 선언적 언어입니다. 그러나 SQL Server의 (하지 않도록 다른 엔진에 대한) DBA는 실제로 (좀) SQL 쿼리 스토어에서 실행 계획을 강제로,이 작업을 수행 할 수 있습니다.
하지만, 그래, 당신은 당신의 응용 프로그램에서 또는 쿼리 텍스트 자체 내에서 그것을 제어 할 수 없습니다.
추신 2 개 센트 : 당신이 강제 ORDER를 사용하여 가입의 순서를 제어 할 수 있습니다.
from https://stackoverflow.com/questions/3152182/sql-does-the-order-of-where-conditions-matter by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 왼쪽은 내부에 회전이 조인 (0) | 2020.05.03 |
---|---|
[SQL] SQL 서버 : 드롭 테이블 캐스케이드 동등한? (0) | 2020.05.03 |
[SQL] 별도 쉼표 SQL 서버 테이블 값 저장소를 분리 (0) | 2020.05.03 |
[SQL] 외래 키 등을 사용하여 복합 기본 키 (0) | 2020.05.03 |
[SQL] SQL의 가난한 저장 프로 시저 실행 계획 성능 - 매개 변수 스니핑 (0) | 2020.05.03 |