Eins der für mich interessantesten Features von Oracle 10.2 ist das “Multi-column partition pruning”. Sind Tabellen nach mehreren Spalten Range-Partitioniert, kann Partition Pruning voll benutzt werden, auch wenn der/die führenden Partition-Keys nicht in der Abfrage verwendet werden. In alten Versionen geht das nicht, Partition-Pruning wird dann nicht benutzt bzw. es werden viel grössere Bereiche gelesen.
Diese Aussage stimmt so inzwischen nicht mehr.
Mein Kollege Chris war gestern ganz erstaunt, dass Oracle 9.2.0.8 im Execution-Plan folgendes ausgab:
------------------------------------------------------------ | Id | Operation | Name | Pstart | Pstop | ------------------------------------------------------------ | 0 | SELECT STATEMENT | | | | | 1 | PARTITION RANGE ITERATOR | | KEY(MC) | KEY(MC) | |* 2 | TABLE ACCESS FULL | T | KEY(MC) | KEY(MC) | ------------------------------------------------------------
KEY(MC) heisst aber “Multi-column partition pruning”!
Ich habe dies dann in einer 9.2.0.7 Datenbank ausgetestet – dort funktioniert es nicht…
Nach diversen Tests in unterschiedlichen Oracle-Versionen hat Chris dann folgendes festgestellt:
Oracle hat einen Backport dieses Features auf 9.2.0.8 und 10.1.0.5 vorgenommen. In allen älteren 10.1 und 9.2-Versionen funktioniert es nicht.
Was heisst das nun –
oder
?
– Ein wichtiges Feature wurde in noch häufig benutzte Versionen eingebaut.
– Hoffentlich wurde das in den doch sehr komplexen Optimizer auch richtig implementiert…