Ich teste meine MySQL Datenbank auf Geschwindigkeit und versuche meine Tabellen zu optimerieren bzw. die ganze Datenbank.
Ich habe ein kleines Testprogramm geschrieben, das die Dauer von verschiedenen Abfragen misst.
Ich habe ein Tabelle ParkingPlace. Die Tabelle hat unter anderem folgende Felder:
Auf der Tabelle wird folgende Abfrage durchgeführt:
Ein "show index from parkingplace" liefert:
Soweit so gut. Ich habe die Abfrage in zwei Fällen getestet.
Fall A ohne Index "RasterId_Active_Trusable_Index" ergibt sich folgende Leistung:
Fall B nun mit dem entsprechenden Index
Was mich hier verwirrt ist die Tatsache, dass mit einem Index die Dauer der Abfragen zunimmt bei steigender Anzahl an Einträgen. Ehrlich gesagt, das ist ja auch zu erwarten, aber mit kommt diese Steigerung der Dauer der Abfragen doch ziemlich groß vor. Ich hatte erwartet, dass die Dauer der Abfragen annähernd konstant bleibt (Außerdem finde ich die Leistungssteigerung jetzt auch nicht soo überwältigend).
Was ist Eure Meinung dazu?
Habe ich vielleicht was vergessen was man noch verbessern könnte?
Ich habe ein kleines Testprogramm geschrieben, das die Dauer von verschiedenen Abfragen misst.
Ich habe ein Tabelle ParkingPlace. Die Tabelle hat unter anderem folgende Felder:
Code:
+----------------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------------+--------------+------+-----+---------+----------------+
| id | bigint(20) | NO | PRI | NULL | auto_increment |
| active | bit(1) | NO | | NULL | |
...
| ownerId | bigint(20) | NO | | NULL | |
...
| rasterId | int(11) | NO | MUL | NULL | |
...
| trustable | bit(1) | NO | | NULL | |
+----------------------+--------------+------+-----+---------+----------------+
Auf der Tabelle wird folgende Abfrage durchgeführt:
Code:
Hibernate:
select
parkingpla0_.id as id1_,
.../*alle anderen Spaltennamen */,
parkingpla0_.trustable as trustable1_
from
ParkingPlace parkingpla0_
where
parkingpla0_.rasterId=?
and parkingpla0_.active=?
and parkingpla0_.trustable=?
Ein "show index from parkingplace" liefert:
Code:
+--------------+------------+--------------------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+--------------+------------+--------------------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| parkingplace | 0 | PRIMARY | 1 | id | A | 20000 | NULL | NULL | | BTREE | |
| parkingplace | 1 | RasterId_Active_Trusable_Index | 1 | rasterId | A | NULL | NULL | NULL | | BTREE | |
| parkingplace | 1 | RasterId_Active_Trusable_Index | 2 | active | A | NULL | NULL | NULL | | BTREE | |
| parkingplace | 1 | RasterId_Active_Trusable_Index | 3 | trustable | A | NULL | NULL | NULL | | BTREE | |
Soweit so gut. Ich habe die Abfrage in zwei Fällen getestet.
Fall A ohne Index "RasterId_Active_Trusable_Index" ergibt sich folgende Leistung:
10000 queries auf 10000 parkingplaces -> 3m 54sec
10000 queries auf 20000 parkingplaces -> 7m 54sec
10000 queries auf 30000 parkingplaces -> 11m 30sec
10000 queries auf 40000 parkingplaces -> 16m 37sec
Fall B nun mit dem entsprechenden Index
10000 queries auf 10000 parkingplaces -> 1m 42sec
10000 queries auf 20000 parkingplaces -> 2m 00sec
10000 queries auf 30000 parkingplaces -> 4m 48sec
10000 queries auf 40000 parkingplaces -> 6m 30sec
Was mich hier verwirrt ist die Tatsache, dass mit einem Index die Dauer der Abfragen zunimmt bei steigender Anzahl an Einträgen. Ehrlich gesagt, das ist ja auch zu erwarten, aber mit kommt diese Steigerung der Dauer der Abfragen doch ziemlich groß vor. Ich hatte erwartet, dass die Dauer der Abfragen annähernd konstant bleibt (Außerdem finde ich die Leistungssteigerung jetzt auch nicht soo überwältigend).
Was ist Eure Meinung dazu?
Habe ich vielleicht was vergessen was man noch verbessern könnte?