이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
당신은 다음과 같은 페이지를 보고 싶을 수도 있습니다.PostgreSQL : 문서 : 17 : 14.1. 설명 토토 사이트 순위버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

14.1. 토토 사이트 추천설명

포스트그레SQL고안쿼리 계획수신하는 각 쿼리에 대해. 쿼리 구조와 쿼리 구조에 맞는 올바른 계획 선택 데이터의 속성은 좋은 결과를 위해 절대적으로 중요합니다. 성능이 있으므로 시스템에는 복잡한 내용이 포함되어 있습니다.플래너좋은 계획을 선택하려고 노력합니다. 당신은 할 수 있습니다 토토 사이트 추천하다PostgreSQL : 문서 : 9.1 : 와이즈 토토보라는 명령 플래너가 쿼리에 대해 생성하는 쿼리 계획입니다. 계획 읽기 광범위한 튜토리얼이 필요한 예술이지만 그렇지 않습니다. 하지만 여기에 몇 가지 기본 정보가 있습니다.

쿼리 계획의 구조는 트리입니다.계획 노드. 트리의 최하위 수준에 있는 노드 테이블 스캔 노드는 테이블에서 원시 행을 반환합니다. 거기 다양한 테이블 액세스를 위한 다양한 유형의 스캔 노드 방법: 순차 스캔, 인덱스 스캔, 비트맵 인덱스 스캔. 쿼리에 조인, 집계, 정렬 또는 기타 작업이 필요한 경우 원시 행에 대한 작업을 수행하면 추가 노드가 발생합니다. 이러한 작업을 수행하려면 스캔 노드 위에 있어야 합니다. 다시 말하지만, 일반적으로 이러한 작업을 수행하는 방법은 여러 가지가 있습니다. 여기에는 다른 노드 유형도 나타날 수 있습니다. 의 출력설명각 노드에 대해 한 줄이 있습니다. 기본 노드 유형과 토토 사이트 추천을 보여주는 계획 트리 기획자가 그 계획을 실행하기 위해 만든 것으로 추정 노드. 첫 번째 줄(최상위 노드)에는 추정 합계가 있습니다. 계획 실행 토토 사이트 추천; 기획자가 이 번호로 최소화하려고 노력합니다.

다음은 출력이 어떻게 보이는지 보여주기 위한 간단한 예입니다. 좋아요:[1]

설명 선택 * FROM tenk1;

                         쿼리 계획
------------------------------------------------
 tenk1의 시퀀스 스캔(토토 사이트 추천=0.00..458.00행=10000너비=244)

인용된 숫자설명(왼쪽에서 오른쪽으로):

  • 예상 시작 토토 사이트 추천(출력까지 소요되는 시간) 스캔이 시작될 수 있습니다(예: 정렬을 수행할 시간). 노드)

  • 예상 총 토토 사이트 추천(모든 행이 검색된 경우, 그러나 그렇지 않을 수도 있습니다. 예를 들어, a가 포함된 쿼리제한절은 지불이 부족할 것입니다 총 토토 사이트 추천한도계획 노드의 입력 노드)

  • 이 계획 노드에 의해 출력된 예상 행 수(다시 말하지만, 실행이 완료되는 경우에만)

  • 이것으로 출력된 행의 예상 평균 너비(바이트) 계획 노드

토토 사이트 추천은 다음에 의해 결정된 임의의 단위로 측정됩니다. 기획자의 토토 사이트 추천 매개변수(참조섹션 18.7.2). 전통적인 관행은 토토 사이트 추천을 측정하는 것입니다. 디스크 페이지 가져오기 단위; 즉,seq_page_cost일반적으로 다음과 같이 설정됩니다.1.0그리고 다른 비용 매개변수는 이를 기준으로 설정됩니다. (의 예는 이 섹션은 기본 비용 매개변수를 토토 사이트 추천하여 실행됩니다.)

상위 노드의 토토 사이트 추천은 모든 하위 노드의 토토 사이트 추천이 포함됩니다. 또한 다음 사항도 중요합니다. 토토 사이트 추천은 기획자가 관심을 갖는 사항만을 반영한다는 점을 인식하세요. 약. 특히 토토 사이트 추천은 소요 시간을 고려하지 않습니다. 결과 행을 클라이언트에 전송합니다. 실제 경과 시간에 중요한 요소입니다. 하지만 기획자는 계획을 변경하여 변경할 수 없기 때문에 이를 무시합니다. (모든 올바른 계획은 동일한 행 집합을 출력할 것이라고 믿습니다.)

값이 조금 까다롭습니다. 왜냐하면 그것은아님계획 노드에서 처리하거나 스캔한 행 수입니다. 그것은 일반적으로 더 적습니다. 이는 임의의 예상 선택성을 반영합니다.어디에서-조건이 되는 절 노드에 적용됩니다. 이상적으로 최상위 행 추정치는 실제로 반환, 업데이트 또는 행 수를 대략적으로 계산합니다. 쿼리에 의해 삭제되었습니다.

예로 돌아가기:

설명 선택 * FROM tenk1;

                         쿼리 계획
------------------------------------------------
 tenk1의 시퀀스 스캔(토토 사이트 추천=0.00..458.00행=10000너비=244)

이것은 매우 간단합니다. 그렇게 한다면:

pg_class WHERE relname = 'tenk1'에서 relpages, reltuples 선택;

당신은 그것을 발견할 것입니다tenk1있음 358개의 디스크 페이지와 10,000개의 행. 예상 토토 사이트 추천은 다음과 같이 계산됩니다. (읽은 디스크 페이지 *seq_page_cost) + (스캔된 행 *cpu_tuple_cost). 기본적으로,seq_page_cost1.0이고cpu_tuple_cost은 0.01이므로 추정값은 토토 사이트 추천은 (358 * 1.0) + (10000 * 0.01) = 458입니다.

이제 원래 쿼리를 수정하여 다음을 추가하겠습니다.어디조건:

설명 선택 * FROM tenk1 WHERE 고유1 < 7000;

                         쿼리 계획
----------------------------------
 tenk1의 시퀀스 스캔(토토 사이트 추천=0.00..483.00행=7033너비=244)
   필터: (고유1 < 7000)

다음에 주의하세요.설명출력 쇼어디a로 적용되는 절"필터"조건; 이것이 의미하는 바는 계획 노드는 스캔하는 각 행의 조건을 확인하고 조건을 만족하는 것만 출력합니다. 추정치는 다음으로 인해 출력 행이 감소되었습니다.어디에서절. 그러나 스캔은 여전히 10000개 행을 모두 방문하면 토토 사이트 추천이 감소하지 않습니다. 사실 그것 조금 올랐습니다 (10000 *cpu_operator_cost, 정확하게는) 확인에 소요된 추가 CPU 시간을 반영합니다.어디에서조건.

이 쿼리가 선택하는 실제 행 수는 7000개이지만추정치는 대략적인 수치일 뿐입니다. 이 실험을 복제하려고 하면 아마도 다음과 같은 결과를 얻게 될 것입니다. 약간 다른 추정치; 게다가 매번 변경될 것입니다.분석명령, 왜냐하면 통계 제작사분석다음에서 가져옴 테이블의 무작위 샘플입니다.

이제 조건을 더욱 제한적으로 만들어 보겠습니다.

설명 선택 * FROM tenk1 WHERE 고유1 < 100;

                                  쿼리 계획
----------------------------------------------------
 tenk1의 비트맵 힙 스캔(토토 사이트 추천=2.37..232.35행=106너비=244)
   조건 재확인: (unique1 < 100)
   - tenk1_unique1의 비트맵 인덱스 스캔(토토 사이트 추천=0.00..2.37행=106너비=0)
         인덱스 조건: (unique1 < 100)

여기서 기획자는 2단계 계획을 사용하기로 결정했습니다: 하단 계획 노드는 행의 위치를 찾기 위해 인덱스를 방문합니다. 인덱스 조건과 일치한 다음 상위 계획 노드 실제로 테이블 자체에서 해당 행을 가져옵니다. 가져오는 중 행을 별도로 읽는 것은 순차적으로 읽는 것보다 훨씬 비쌉니다. 그러나 테이블의 모든 페이지가 반드시 그래야 하는 것은 아니기 때문에 방문하더라도 순차 스캔보다 여전히 저렴합니다. ( 두 가지 계획 수준을 사용하는 이유는 상위 계획 노드가 인덱스로 식별된 행 위치를 물리적 위치로 정렬합니다. 별도의 토토 사이트 추천을 최소화하기 위해 읽기 전에 주문하십시오. 가져옵니다."비트맵"에 언급됨 노드 이름은 정렬을 수행하는 메커니즘입니다.)

만약에어디조건은 선택적입니다. 충분히, 플래너는 다음으로 전환할 수 있습니다."간단함"색인 스캔 계획:

설명 선택 * FROM tenk1 WHERE 고유1 < 3;

                                  쿼리 계획
----------------------------------------------------
 tenk1에서 tenk1_unique1을 사용하는 인덱스 스캔(토토 사이트 추천=0.00..10.00행=2너비=244)
   인덱스 조건: (unique1 < 3)

이 경우 테이블 행은 색인 순서로 가져오며, 읽기 토토 사이트 추천이 더 많이 들지만 읽을 수 있는 내용이 너무 적습니다. 행 위치를 정렬하는 데 드는 추가 토토 사이트 추천은 그만한 가치가 없습니다. 다음을 가져오는 쿼리에 대해 이 계획 유형을 가장 자주 볼 수 있습니다. 단일 행, 그리고 다음이 있는 쿼리의 경우주문 기준색인과 일치하는 조건 주문하세요.

다음에 다른 조건 추가어디절:

설명 선택 * FROM tenk1 WHERE Unique1 < 3 AND stringu1 = 'xxx';

                                  쿼리 계획
----------------------------------------------------
 tenk1에서 tenk1_unique1을 사용하는 인덱스 스캔(토토 사이트 추천=0.00..10.01행=1너비=244)
   지수 조건: (unique1 < 3)
   필터: (stringu1 = 'xxx'::name)

추가된 조건stringu1 = 'xxx'출력 행 추정치를 줄이지만 토토 사이트 추천은 줄지 않습니다. 여전히 동일한 행 집합을 방문해야 합니다. 주의할 점은stringu1절은 다음으로 적용될 수 없습니다. 인덱스 조건(이 인덱스는 다음에만 있으므로고유1열). 대신 필터로 적용됩니다. 인덱스로 검색된 행에 대해. 따라서 토토 사이트 추천은 실제로 이 추가 확인을 반영하여 약간 증가했습니다.

에서 참조된 여러 열에 인덱스가 있는 경우어디, 기획자는 다음을 사용하도록 선택할 수 있습니다. 인덱스의 AND 또는 OR 조합:

설명 선택 * FROM tenk1 여기서 고유1 < 100 AND 고유2  9000;

                                     쿼리 계획
------------------------------------------------------------------------
 tenk1의 비트맵 힙 스캔(토토 사이트 추천=11.27..49.11행=11너비=244)
   조건을 다시 확인하세요: ((unique1 < 100) AND (unique2  9000))
   - BitmapAnd(토토 사이트 추천=11.27..11.27행=11너비=0)
         - tenk1_unique1의 비트맵 인덱스 스캔(토토 사이트 추천=0.00..2.37행=106너비=0)
               지수 조건: (고유1 < 100)
         - tenk1_unique2의 비트맵 인덱스 스캔(토토 사이트 추천=0.00..8.65행=1042너비=0)
               지수 조건: (unique2  9000)

그러나 이것은 두 색인을 모두 방문해야 하므로 그렇지 않습니다. 단 하나의 인덱스를 토토 사이트 추천하고 처리하는 것에 비해 필연적으로 승리합니다. 다른 조건은 필터입니다. 관련된 범위를 변경하는 경우 그에 따라 계획이 변경되는 것을 볼 수 있습니다.

우리가 설정한 열을 토토 사이트 추천하여 두 테이블을 조인해 보겠습니다. 논의 중:

설명 선택 *
tenk1 t1, tenk2 t2에서
t1.unique1 < 100 AND t1.unique2 = t2.unique2;

                                      쿼리 계획
-------------------------------------------------------------------------
 중첩 루프(토토 사이트 추천=2.37..553.11행=106너비=488)
   - tenk1 t1의 비트맵 힙 스캔(토토 사이트 추천=2.37..232.35 행=106 너비=244)
         조건 재확인: (unique1 < 100)
         - tenk1_unique1의 비트맵 인덱스 스캔(토토 사이트 추천=0.00..2.37행=106너비=0)
               지수 조건: (고유1 < 100)
   - tenk2 t2에서 tenk2_unique2를 사용한 인덱스 스캔(토토 사이트 추천=0.00..3.01 행=1 너비=244)
         인덱스 조건: (unique2 = t1.unique2)

이 중첩 루프 조인에서 외부(상부) 스캔은 동일합니다. 앞서 본 비트맵 인덱스 스캔과 그에 따른 토토 사이트 추천 및 행 개수 우리가 적용하고 있기 때문에 동일합니다.어디고유1 < 100해당 노드에서.t1.unique2 = t2.unique2절은 아직 관련이 없으므로 영향을 미치지 않습니다. 외부 스캔의 행 수. 내부(하부) 스캔의 경우,고유2현재 외부 스캔 값 행은 인덱스를 생성하기 위해 내부 인덱스 스캔에 연결됩니다. 같은 조건고유2 =상수. 그래서 우리는 같은 것을 얻습니다 예를 들어, 내부 스캔 계획 및 토토 사이트 추천을 통해 얻을 수 있는 것입니다.설명 선택 * FROM tenk2 WHERE Unique2 = 42. 루프 노드의 토토 사이트 추천은 토토 사이트 추천을 기준으로 설정됩니다. 외부 스캔과 내부 스캔 각각에 대한 1회 반복 외부 행(여기서는 106 * 3.01) 및 조인을 위한 약간의 CPU 시간 처리 중입니다.

이 예에서 조인의 출력 행 개수는 다음과 같습니다. 두 스캔의 행 개수를 곱한 값이지만 모두 사실이 아닙니다. 경우가 있을 수 있기 때문에어디절 두 테이블을 모두 언급하므로 조인 시에만 적용할 수 있습니다. 입력 스캔이 아닌 지점입니다. 예를 들어, 다음을 추가했다면어디서 ... 그리고 t1.hundred < t2.백, 그러면 출력 행 수가 감소합니다. 노드에 가입하지만 입력 스캔을 변경하지 않습니다.

변형 계획을 보는 한 가지 방법은 계획자가 강제로 가장 저렴하다고 생각되는 전략은 무시하고 설명된 활성화/비활성화 플래그섹션 18.7.1. (이것은 조잡한 도구이지만 유용합니다. 또한 참조하십시오.섹션 14.3.)

SET 활성화_nestloop = 꺼짐;
설명 선택 *
tenk1 t1, tenk2 t2에서
t1.unique1 < 100 AND t1.unique2 = t2.unique2;

                                        쿼리 계획
-----------------------------------------------------------------------------
 해시 조인(토토 사이트 추천=232.61..741.67행=106너비=488)
   해시 조건: (t2.unique2 = t1.unique2)
   - tenk2 t2의 시퀀스 스캔(토토 사이트 추천=0.00..458.00 행=10000 너비=244)
   - 해시(토토 사이트 추천=232.35..232.35행=106너비=244)
         - tenk1 t1의 비트맵 힙 스캔(토토 사이트 추천=2.37..232.35 행=106 너비=244)
               조건 재확인: (unique1 < 100)
               - tenk1_unique1의 비트맵 인덱스 스캔(토토 사이트 추천=0.00..2.37행=106너비=0)
                     인덱스 조건: (unique1 < 100)

이 계획은 100개의 흥미로운 행을 추출하는 것을 제안합니다.텐크1동일한 이전 색인 사용 스캔하여 메모리 내 해시 테이블에 저장한 다음 순차 스캔tenk2, 조사 중 가능한 일치를 위해 해시 테이블에t1.unique2 = t2.unique2각각tenk2행. 읽는 토토 사이트 추천텐크1그리고 해시 테이블을 설정하는 것은 시작입니다 해시 조인 토토 사이트 추천. 우리가 나올 때까지 출력이 없기 때문입니다. 읽기 시작할 수 있습니다tenk2. 합계 조인에 대한 예상 시간에는 막대한 토토 사이트 추천이 포함됩니다. 해시 테이블을 10000번 조사하는 데 소요되는 CPU 시간입니다. 그러나 참고하세요 우리는아님충전 중 10000배 232.35; 해시 테이블 설정은 한 번만 수행됩니다. 이 계획 유형입니다.

기획자의 정확성을 확인할 수 있습니다. 토토 사이트 추천에 따른 예상 비용설명하세요 분석. 이 명령은 실제로 쿼리를 실행한 다음 각 계획 노드 내에 누적된 실제 실행 시간을 표시합니다. 일반과 동일한 예상 토토 사이트 추천과 함께설명표시됩니다. 예를 들어, 결과를 얻을 수 있습니다. 이렇게:

설명 분석 선택 *
tenk1 t1, tenk2 t2에서
t1.unique1 < 100 AND t1.unique2 = t2.unique2;

                                                            쿼리 계획
---------------------------------------------------------------------------------------------------------------------
 중첩 루프(토토 사이트 추천=2.37..553.11 행=106 너비=488) (실제 시간=1.392..12.700 행=100 루프=1)
   - tenk1 t1의 비트맵 힙 스캔(토토 사이트 추천=2.37..232.35 행=106 너비=244) (실제 시간=0.878..2.367 행=100 루프=1)
         조건 재확인: (unique1 < 100)
         - tenk1_unique1의 비트맵 인덱스 스캔(토토 사이트 추천=0.00..2.37 행=106 너비=0)(실제 시간=0.546..0.546 행=100 루프=1)
               지수 조건: (고유1 < 100)
   - tenk2 t2에서 tenk2_unique2를 사용한 인덱스 스캔(토토 사이트 추천=0.00..3.01 행=1 너비=244) (실제 시간=0.067..0.078 행=1 루프=100)
         인덱스 조건: (unique2 = t1.unique2)
 총 런타임: 14.452ms

참고하세요"실제 시간"값 실시간의 밀리초 단위인 반면,토토 사이트 추천추정치는 임의의 단위로 표현됩니다. 그래서 그들은 일치하지 않을 것 같습니다. 주의할 점은 실제 시간과 예상 토토 사이트 추천의 비율이 다음과 같은지 여부입니다. 일관성.

일부 쿼리 계획에서는 하위 계획 노드가 두 번 이상 실행되었습니다. 예를 들어 내부 인덱스 스캔은 다음과 같습니다. 위의 중첩 루프 계획에서 외부 행당 한 번씩 실행됩니다. 에서 그러한 경우에는루프값은 다음을 보고합니다. 노드의 총 실행 횟수, 실제 시간 및 표시된 행 값은 실행당 평균입니다. 이는 다음과 같이 수행됩니다. 토토 사이트 추천 추정 방식과 수치를 비교할 수 있도록 하세요. 표시됩니다. 를 곱한다루프값 노드에서 실제로 소요된 총 시간을 가져옵니다.

총 런타임표시자:분석 설명실행기 시작 및 종료 시간은 있지만 구문 분석, 재작성 또는 계획 시간은 아닙니다. 에 대한삽입, 업데이트, 그리고삭제명령, 소요된 시간 테이블 변경 사항을 적용하면 최상위 삽입에 토토 사이트 추천이 청구됩니다. 계획 노드를 업데이트하거나 삭제합니다. (이 노드 아래의 계획 노드 이전 행을 찾는 작업 및/또는 계산 작업을 나타냅니다. 새로운 것.) 실행에 소요된 시간이전트리거가 있는 경우 관련 삽입, 업데이트 또는 노드 삭제, 실행에 시간이 소요됨이후트리거가 아닙니다. 각각 소요된 시간 트리거(둘 중 하나)이전또는이후)도 별도로 표시되며 총 실행 시간. 그러나 지연된 제약 조건은 트리거된다는 점에 유의하세요. 트랜잭션이 끝날 때까지 실행되지 않으므로 실행되지 않습니다. 표시됨분석 설명.

런타임을 측정하는 두 가지 중요한 방법이 있습니다.분석 설명정상에서 벗어날 수 있음 동일한 쿼리를 실행합니다. 첫째, 출력 행이 없기 때문에 클라이언트에게 전달되는 네트워크 전송 토토 사이트 추천 및 I/O 포맷 토토 사이트 추천은 포함되지 않습니다. 둘째, 다음으로 추가된 오버헤드입니다.분석 설명중요할 수 있습니다. 특히 느린 컴퓨터에서gettimeofday()커널 호출.

그것은 주목할 가치가 있습니다설명결과는 다음 이외의 상황으로 추정되어서는 안 됩니다. 실제로 테스트하고 있는 것; 예를 들어, 장난감 크기의 결과 테이블은 큰 테이블에 적용된다고 가정할 수 없습니다. 기획자의 토토 사이트 추천 추정은 선형적이지 않으므로 다른 방법을 선택할 수 있습니다. 더 크거나 작은 테이블을 계획하세요. 극단적인 예는 다음과 같습니다. 하나의 디스크 페이지만 차지하는 테이블에서는 거의 항상 인덱스 사용 가능 여부에 관계없이 순차 스캔 계획을 얻습니다. 플래너는 한 디스크 페이지를 읽는 데 시간이 걸린다는 것을 인식합니다. 어떤 경우에도 테이블을 처리해야 하므로 값이 없습니다. 색인을 보기 위해 추가 페이지 읽기를 확장합니다.

참고

[1]

이 섹션의 예는 회귀 분석에서 추출되었습니다. 다음을 수행한 후 데이터베이스 테스트진공 분석, 8.2 개발 소스 사용. 당신은 예제를 직접 시도해 보면 비슷한 결과를 얻을 수 있습니다. 하지만 예상 토토 사이트 추천과 행 개수는 약간 다를 수 있습니다. 왜냐하면분석의 통계는 정확한 샘플이 아닌 무작위 샘플입니다.