서거블

Sargable

관계형 데이터베이스에서는 DBMS 엔진이 인덱스를 이용하여 쿼리 실행 속도를 높일 수 있는 경우 쿼리의 조건(또는 술어)은 sargable이라고 합니다.이 용어는 검색 ARGument ABLE의 축약어에서 파생되었습니다.

sargable이 되지 않는 쿼리는 non-sargable 쿼리로 알려져 있으며 일반적으로 쿼리 시간에 부정적인 영향을 미치기 때문에 쿼리 최적화 절차 중 하나는 sargable로 변환하는 것입니다.이 효과는 색인에서 식별된 특정 페이지 목록으로 건너뛰는 대신 색인 없는 책에서 특정 용어를 검색하는 것과 유사합니다.

SQL 쿼리를 sargable로 할 수 없는 일반적인 상황은 WHERE 절에 열 값으로 동작하는 함수를 포함시키는 것입니다.WHERE 절만 sargability가 중요한 것이 아닙니다.ORDER BY, GROUP BY 및 HAVING 절에도 영향을 미칠 수 있습니다.한편 SELECT 절에는 성능에 악영향을 주지 않고 비사거블 표현을 포함할 수 있습니다.

  • Sargable 연산자:=, >, <, >=, <=, BETWEEN, LIKE, IS [NOT] NULL
  • 성능이 거의 향상되지 않는 Sargable 연산자:<>, IN, OR, NOT IN, NOT LIKE

간단한 예

WHEREsargable인 구는 일반적으로 연산자의 왼쪽에 필드 값, 연산자의 오른쪽에 스칼라 값 또는 식이 있습니다.

sargable 불가:

선택한다. * 부터   마이테이블 어디에  SQRT(myIntField) > 11.7 

myIntField는 함수에 내장되어 있기 때문에 이 작업은 수행할 수 없습니다.myIntField에서 사용할 수 있는 인덱스가 있으면 사용할 수 없습니다.게다가.SQRT()myTable의 모든 레코드에 호출됩니다.

Sargable 버전:

선택한다. * 부터   마이테이블 어디에  myIntField > 11.7 * 11.7 

myIntField는 함수에 포함되어 있지 않기 때문에 myIntField에서 사용 가능한 인덱스를 사용할 수 있습니다.또한 이 표현은 테이블 내의 각 레코드가 아닌 한 번만 평가됩니다.

「 」를 참조해 주세요.

레퍼런스

  • SQL 퍼포먼스 조정: Peter Gulutzan, Trudy Pelzer (Addison Wesley, 2002) ISBN0-201-79169-2(2장, 단순 검색)
  • Kalen Delaney, 코너 커닝햄, Jonathan Kehaias, Benjamin Nevarez, Paul S. Randal (O'Reily, 2013) ISBN 978-0-7356-5856-1 (11장, Query Optimizer)

외부 링크