Partitionierung bringt keine Performanceverbesserung
Hallo,
Ich versuche momentan die Vorteile von partitionierten Tabellen herauszufinden, um abschätzen zu können, ob sich eine Umstellung im Betriebseinsatz lohnt.
Dazu habe ich mir zwei Tabellen erstellt, 'ptest' und 'ptest_no_partitions', die Namen dürften selbstredend sein. Die Partitionstabelle habe ich mit mehreren Vorgehensweisen angetestet, zu erst mit der Maximalanzahl von Partitionen (1024) und mit einer geringeren Anzahl (50) mit jeweils zwischen 5 und 20 Millionen Einträgen.
Habe mir zusätzlich ein PHP-Skript geschrieben, um die Testabfragen zu vereinheitlichen und zu verschnellern. Inserts wurden einige Tausend gemacht um den Durchschnittswert zu ermitteln, der Rest (SELECTs und INSERTs) sind jeweils einzelne Abfragen, allerdings habe ich auch darauf geachtet, dass im Hintergrund sonst keine SQL-Abfragen stattfinden.
Im Anhang ist der Log meines Skriptes, der zur Veranschaulichung dienen soll, um zu zeigen, dass es scheinbar keine Geschwindigkeitsvorteile gegenüber nicht-partitionierten Tabellen gibt, sondern, im Gegenteil, die Performance nur beeinträchtigt wird.
Die Tabellentypen sind InnoDB, ein Describe liefert:
+-------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------------+------+-----+---------+----------------+
| Date | date | YES | MUL | NULL | |
| id | int(11) unsigned | NO | MUL | NULL | auto_increment |
| text | varchar(32) | NO | | NULL | |
+-------+------------------+------+-----+---------+----------------+
Log zum Vergleich bei Abfragen (habe meistens auch noch mal händisch nachgeprüft und bin auf ähnliche Ergebnisse gekommen):
-- STATISTICS FOR TABLE ptest --
> SELECT on partitioned column : 0.211394s
> SELECT on primary key ID : 0.391314s
> UPDATE on primary key ID : 0.539117s
> SELECT on unindexed column text : 41.573074s
> INSERTS :
- AVG : 0.0242209673s
- MIN : 0.0002820492s
- MAX : 0.2606310844s
-- STATISTICS FOR TABLE ptest_no_partitions --
> SELECT on partitioned column : 0.154859s
> SELECT on primary key ID : 0.007518s
> UPDATE on primary key ID : 0.025108s
> SELECT on unindexed column text : 20.460473s
> INSERTS :
- AVG : 0.0094129403s
- MIN : 0.0002379417s
- MAX : 0.0586159229s
-- DIFFERENCE (Factor no_partitions / partitions) --
> SELECT on partitioned column : 1,36
> SELECT on primary key ID : 52,17
> UPDATE on primary key ID : 21,47
> SELECT on unindexed column text : 2,03
> INSERTS :
- AVG : 2,57
- MIN : 1,18
- MAX : 4,44