So schätzen Sie die Anzahl der Datensätze in der Tabelle mithilfe des Statistikwerts des eindeutigen Index
Firebird verfügt über einen speziellen Parameter für jeden Index, der “Index-Statistik” genannt wird.
Für eindeutige Indizes wird der Wert der Statistik als 1 geteilt durch die Anzahl der eindeutigen Schlüssel in einem Index berechnet, z. B. beträgt die Statistik für 100 Datensätze 1/100 = 0,01.
Intern verwendet Firebird diesen Wert, um die Qualität des jeweiligen Index zu schätzen (d. h., ob er im Ausführungsplan für die Abfrage verwendet werden soll oder nicht).
Dieser Wert wird in der Spalte RDB$STATISTICS in der Systemtabelle RDB$INDICES gespeichert. Wenn Sie also den Namen des Index kennen, können Sie ihn abrufen.
Wenn dieser Index eindeutig ist (in diesem Fall handelt es sich um den Primärschlüssel), können wir den Statistikwert verwenden, um die ungefähre Anzahl der Datensätze zu ermitteln:
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
Wie Sie sehen können, weicht die Anzahl der Datensätze aufgrund von Rundungen von dem mit der Statistik berechneten Wert ab.
Wir können die Statistik jedoch verwenden, um die Anzahl der Datensätze in den Tabellen schnell zu schätzen und die größten zu identifizieren, zum Beispiel:
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