반응형
SARGable Query란 무엇일까?
https://en.wikipedia.org/wiki/Sargable
In relational databases, a condition (or predicate) in a query is said to be sargable if the DBMS engine can take advantage of an index to speed up the execution of the query. The term is derived from a contraction of Search ARGument ABLE.
관계형 데이터베이스에서 DBMS 엔진이 인덱스를 활용해서 실행 속도를 높일 수 있는 쿼리를 의미한다.
Search ARGument ABLE....살가블?
반대말은 non-sargable이라고 한다. 결국 중요한 것은 sargable 하게 쿼리를 짜는 것이다.
non-sargable한 사례 중에 대표적인 것이 컬럼 위에다가 함수를 씌우는 것인데, 예시는 아래와 같다.
non-sargable query 예시
SELECT ... FROM ...
WHERE Year(myDate) = 2008
sargable query 예시 (위 쿼리 수정)
WHERE myDate >= '01-01-2008' AND myDate < '01-01-2009'
옛날에 데이터분석가 분께 제 쿼리 왤케 느리죠 ㅠㅠ 라고 했더니
컬럼위에 date를 씌우지 말라고 조언해주시며 쿼리를 고쳐주셨던 기억이 난다. (감사합니다)
추가 예시
Bad: Select ... WHERE SUBSTRING(DealerName,4) = 'Ford'
Fixed: Select ... WHERE DealerName Like 'Ford%'
Bad: Select ... WHERE DateDiff(mm,OrderDate,GetDate()) >= 30
Fixed: Select ... WHERE OrderDate < DateAdd(mm,-30,GetDate())
예시를 보면 칼럼 위에 함수를 씌우는 대신 다른 방법으로 동일한 값을 지정한다.
위키피디아에 Sargable operators도 소개되어 있다.
- Sargable operators: =, >, <, >=, <=, BETWEEN, LIKE, IS [NOT] NULL
- Sargable operators that rarely improve performance: <>, IN, OR, NOT IN, NOT LIKE
필요한 데이터만 조회하여 효율적인 쿼리를 짜도록 하자~_~
예시는 스택오버플로우에서 퍼왔다. (https://stackoverflow.com/questions/799584/what-makes-a-sql-statement-sargable)
반응형
'일하면서 필요한 공부를 해보자 > 데이터 공부를 해보자' 카테고리의 다른 글
[비개발자SQL] SQLD 자격증 합격 후기 (비추천합니다 / ChatGPT 활용) (1) | 2023.04.07 |
---|---|
[GA4] 구글 애널리틱스에 입문해보기로 결심... (1) | 2022.09.04 |
[비개발자SQL] SQL로 하는 데이터 분석 (feat.코드잇 수강후기) (0) | 2022.08.08 |