The sample size shown for these columns is not the sample size used to gather the basic column statistics. AUTO_SAMPLE_SIZE still uses all the rows in the table - the NULL rows to gather the basic column statistics (55,500 rows in this case). The size shown is the sample size used to create the histogram on the column.Außerdem bestätigt Frau Colgan, dass das sample für die Histogramme:
- in der Regel ca. 5.500 NON-NULL Werte enthält
- üblicherweise für den Aufbau aller Histogramme für die Tabelle verwendet wird
- vergrößert wird, wenn ein Attribut sehr viele NULL values enthält (damit man immer noch auf die magischen 5.500 kommt); in diesem Fall kann es dann auch vorkommen, dass mehrere samples für Fälle mit extrem unterschiedlicher NULL-Häufigkeit erzeugt werden.
Besonders solide scheint das Verfahren tatsächlich nicht zu sein, denn 5.500 halte ich für arg wenig (und sehr willkürlich). Insofern finde ich Randolfs Vorschlag sehr plausibel, die Histogramm-Erzeugung in einen zweiten dbms_stats-Aufruf auszulagern (auch wenn das ein zusätzliches Lesen der Tabelle erforderlich macht).
Keine Kommentare:
Kommentar veröffentlichen