Index wird nicht bei Date Operationen benutzt?
Struppi
- datenbank
0 Cheatah
Ich hab grad gesehen, dass wenn ich eine solche Abfrage benutze, mySQL keinen Index verwendet.
EXPLAIN SELECT k . * , DAYOFMONTH( k.datum ) AS tag, u.showName, DATE_FORMAT( k.date, "%d.%m.%Y %H:%i" ) AS date_f
FROM kalender AS k
LEFT JOIN users AS u ON k.user = u.name
WHERE MONTH( k.datum ) =11
AND YEAR( k.datum ) =2005
und zwar ist der Index von k auf datum und user, offensichtlich werden diese aber durch MONTH() und YEAR() nicht mehr benutzt.
k ALL NULL NULL NULL NULL 147 Using where
u eq_ref PRIMARY PRIMARY 20 k.user 1
Oder interpretiere ich das falsch?
Struppi.
Hi,
und zwar ist der Index von k auf datum und user, offensichtlich werden diese aber durch MONTH() und YEAR() nicht mehr benutzt.
richtig. Wenn man bewusst verhindern will, dass z.B. bei einer nummerischen Spalte ein zugehöriger Index benutzt wird, selektiert man einfach "... WHERE spalte+0 ...". Der Index geht schließlich nur über die Spalte, nicht über Berechnungen mit dieser.
Oder interpretiere ich das falsch?
Nö, absolut richtig. Bei MONTH() würde ich sogar unterstellen, dass ein Index gegenüber einem Full Table Scan ineffektiv ist. Ob MySQL Function Based Indexes unterstützt, kann ich Dir allerdings nicht sagen.
Cheatah