본문 바로가기

use-the-index-luke

A.1-3 (DB2) Access vs. filter predicates

use-the-index-luke 저자 Markus Winand


Markus Winand는 SQL에 대한 통찰력을 제공하고 다양한 시스템이 SQL을 지원하는 방법을 modern-sql.com 에서 보여줍니다. 이전에 그는 use-the-index-luke.com 을 만들었는데, 지금도 활발하게 유지되고 있습니다. Markus는 winand.at 를 통해 강사, 연사 및 컨설턴트로 고용될 수 있습니다.


You can upload a Korean translation of use-the-index-luke.com on your blog

Thank you from the bottom of my heart to author Makus Winand for allowing me.

These are translations that I use for studying by using a papago (google translate)

The translations may not be correct or there may be a typo.

I'd appreciate it if you could point it out in the comments.



use-the-index-luke.com 의 한글번역본을 블로그에 업로드 해도 된다고

허락해주신 Makus Winand 저자님께 진심으로 감사합니다.

이 번역본들은 제가 공부용도로 번역기(papago, google transrate)를 돌려서

번역한 내용들이라 맞지 않거나, 오타가 있을수 있습니다.

댓글로 지적해주시면 감사하겠습니다.


https://use-the-index-luke.com/sql/explain-plan

ㄴaccess 및 filter prdicate 구분

실행 계획에서 술어가 IXSCAN의 시작 및/또는 중지 조건으로 사용되는지 또는 단순한 필터 술어로 사용되는지 여부를 명시하기 때문에 술어 평가 모드에 대한 정보를 DB2보다 더 잘 제공하는 데이터베이스는 없습니다. 하지만 그것은 "sarg"라는 용어의 오래된 정의를 사용하기 때문에 혼란스럽습니다.


초기에 IBM 연구원들은 SARG가 Search ARGument의 축약체이기 때문에 이러한 종류의 검색 조건을 "악어적 술어"라고 이름 지었습니다. 나중에 마이크로소프트와 사이베이스는 "sargable"을 "인덱스를 통해 조회할 수 있다"라는 의미로 재정의했습니다

SQL Performance Tuning


저는 두 가지 정의가 모두 매우 쓸모없다는 것을 알고 책과 기사에 나오는 용어를 완전히 피합니다. 그러나 DB2 실행 계획에서 필터 술어는 SARG로 표시되므로 IBM DB2가 위에서 언급한 "원래" 정의를 사용한다는 점을 분명히 해야 합니다. 이는 물론 문서에 의해 뒷받침됩니다:


검색을 괄호로 묶는 데는 인덱스 변수 술어가 사용되지 않지만 술어와 관련된 열이 인덱스 키의 일부이기 때문에 선택된 경우 인덱스에서 평가됩니다. […]

데이터 구문 분석 가능한 술어 […]를 사용하려면 기본 테이블에서 개별 행에 액세스해야 합니다. 필요한 경우 DMS는 술어를 평가하는 데 필요한 열뿐만 아니라 인덱스에서 가져올 수 없는 SELECT 목록의 열을 충족하는 다른 열도 검색합니다.

Predicate processing for queries, DB2LUW11.1documentation


즉, DB2에서 SARG라는 레이블이 지정된 술어는 일반적으로 인덱스 수준 또는 테이블 수준의 필터 술어에 불과합니다.

DB2 실행 계획에 표시된 술어 정보의 장점은 단순히 액세스 술어에 레이블을 지정하는 것이 아니라 어떤 술어가 START 및/또는 STOP 조건으로 사용되는지 명시적으로 설명한다는 것입니다.

다음 예제에서는 last_explained 보기에 표시된 모든 유형의 술어를 보여 줍니다:


Explain Plan

ID | Operation | Rows | Cost1 | RETURN | | 235502 | GRPBY (COMPLETE) | 1 of 96480 ( .00%) | 235503 | IXSCAN SCALE_SLOW | 96480 of 60299800 ( .16%) | 23544

Predicate Information3 - START (Q1.SECTION = ?) STOP (Q1.SECTION = ?) SARG (Q1.ID2 = ?)

Explain plan by Markus Winand - NO WARRANTY http://use-the-index-luke.com/s/last_explained


스캔한 인덱스 범위는 이 출력에서 매우 쉽게 결정할 수 있습니다. START 및 STOP 술어(이 경우에도 동일함)에 의해서만 결정됩니다. ID2 열의 세 번째 술어는 SARG로 레이블이 지정되므로 필터 술어일 뿐입니다.

SARG 술어는 다른 작업(예: TBSCAN)에도 나타날 수 있지만 START 및 STOP은 IXSCAN에만 해당됩니다. START 또는 STOP이 없으면 상한 또는 하한만 있는 검색을 나타냅니다(예: WHERE x > ?). IXSCAN에 대해 START 또는 STOP이 나타나지 않으면 전체 인덱스가 읽혔음을 의미합니다.

'use-the-index-luke' 카테고리의 다른 글

A.2-1 (MySQL) Getting  (0) 2023.12.06
A.2 MYSQL  (0) 2023.12.04
A.1-1 (DB2) Getting  (1) 2023.11.28
A.1 DB2 LUW  (1) 2023.11.24
A.Execution plans  (0) 2023.11.22