Ik ben bezig met het optimaliseren van een website en loop nu tegen een vervelend probleem aan.
Ik heb een tabel in een MySQL database (5.0.77) die bestaat uit een aantal kolommen (namen zijn in echt datamodel anders):
De tabel bevat zo'n 2,5 miljoen regels en de kolom value heeft momenteel waarden tussen de 0 en 151111
Nu probeer ik hier een simpele query op uit te voeren:
Het uitvoeren van deze query duurt zo'n 1,15 seconden, veels te lang natuurlijk.
Uiteraard even geprobeerd om een index aan te leggen, eerst op het veld test_value, maar volgens een EXPLAIN op die query wordt er dan geen gebruik van gemaakt.
Vervolgens een index aangelegd op test_value en test3_id samen, zodat alle data uit de index kan komen, maar dit zorgt vreemd genoeg voor een toename in de tijd (1,85s).
Als ik samen met die laatste index de volgende query uitvoer, dan is deze wel onmiddelijk klaar (0,01s)
Ik zou er bijna over nadenken om gewoon 100x die query uit te voeren, aangezien dat sneller is dan een query met een <= vergelijking erin.
Mis ik nu iets vreemds hier? Een index zou toch prima om moeten kunnen gaan met <= vergelijkingen (het is een BTREE index trouwens).
Ik heb een tabel in een MySQL database (5.0.77) die bestaat uit een aantal kolommen (namen zijn in echt datamodel anders):
code:
1
2
3
4
5
6
7
8
9
| Table blaat: - test1_id: int(4) - test2_id: int(4) - test3_id: int(4) - test4_id: int(4) - description: varchar(254) - test_value: int(7) PRIMARY KEY bestaat uit de velden test1_id, test2_id, test3_id en test4_id |
De tabel bevat zo'n 2,5 miljoen regels en de kolom value heeft momenteel waarden tussen de 0 en 151111
Nu probeer ik hier een simpele query op uit te voeren:
code:
1
| SELECT DISTINCT test3_id FROM blaat WHERE test_value <= 90 ORDER BY test3_id; |
Het uitvoeren van deze query duurt zo'n 1,15 seconden, veels te lang natuurlijk.
Uiteraard even geprobeerd om een index aan te leggen, eerst op het veld test_value, maar volgens een EXPLAIN op die query wordt er dan geen gebruik van gemaakt.
Vervolgens een index aangelegd op test_value en test3_id samen, zodat alle data uit de index kan komen, maar dit zorgt vreemd genoeg voor een toename in de tijd (1,85s).
Als ik samen met die laatste index de volgende query uitvoer, dan is deze wel onmiddelijk klaar (0,01s)
code:
1
| SELECT DISTINCT test3_id FROM blaat WHERE test_value = 90 ORDER BY test3_id; |
Ik zou er bijna over nadenken om gewoon 100x die query uit te voeren, aangezien dat sneller is dan een query met een <= vergelijking erin.
Mis ik nu iets vreemds hier? Een index zou toch prima om moeten kunnen gaan met <= vergelijkingen (het is een BTREE index trouwens).