이 페이지는 기계 번역되었습니다. 영어 원본을 읽어보세요. English

IBSurgeon 라이브러리

Firebird 고유 인덱스의 통계 값을 사용하여 테이블의 레코드 수를 추정하는 방법

Firebird에는 모든 인덱스에 대해 “인덱스 통계"라고 불리는 특별한 매개변수가 있습니다.

고유 인덱스의 경우, 통계 값은 인덱스의 고유 키 수로 1을 나눈 값으로 계산됩니다. 예를 들어, 100개의 레코드가 있으면 통계는 1/100 = 0.01이 됩니다.

내부적으로 Firebird는 이 값을 사용하여 특정 인덱스의 품질을 추정합니다(즉, 쿼리 계획에서 해당 인덱스를 사용할지 여부를 결정).

이 값은 시스템 테이블 RDB$INDICES의 RDB$STATISTICS 열에 저장되므로, 인덱스 이름을 알고 있다면 이를 검색할 수 있습니다.

이 인덱스가 고유한 경우(이 경우 기본 키), 통계 값을 사용하여 대략적인 레코드 수를 얻을 수 있습니다.

Code
SQL> select rdb$statistics from rdb$indices where rdb$index_name ='PK_DOC_LIST';

         RDB$STATISTICS
=======================
  1.062473558022248e-07

SQL> select 1.0/rdb$statistics from rdb$indices where rdb$index_name ='PK_DOC_LIST';

                 DIVIDE
=======================
      9411998.938227322

SQL> select count(*) from DOC_LIST;

                COUNT
=====================
              9362939

보시다시피, 레코드 수는 반올림으로 인해 통계로 계산된 값과 다릅니다.

그러나 통계를 사용하여 테이블의 레코드 수를 빠르게 추정하고 가장 큰 테이블을 식별할 수 있습니다. 예를 들어:

Code
SQL> select rdb$index_name, 1/rdb$statistics from rdb$indices where rdb$index_name like 'PK%' and rdb$statistics >0  order by 2 desc;

RDB$INDEX_NAME                                   DIVIDE
=============================== =======================
PK_DOC_LIST                           9411998.938227322
PK_PERF_ESTIMATED                     26190.00023190827
PK_PERF_AGG                           2514.000026047463
PK_WARES                              400.0000089406969
PK_INVNT_SALDO                        400.0000089406969
PK_AGENTS                             50.00000111758712
PK_MONEY_SALDO                        49.00000100396576
PK_OPTYPES                            8.999999932944775
PK_WARE_GROUPS                        8.000000000000000
PK_SEMAPHORES                         4.999999925494195
PK_DOC_STATES                         4.000000000000000