Mailinglisten-Archive |
Hallo Norbert, da bleibt mir erstmal ein lautes ohhhjeee ... Also MySQL und auch fast alle anderen RDBMS können Funktionsaufrufe nicht optimieren. Daher ist es absolut zu vermeiden Methodenaufrufe zu verwenden wenn man Ranges wie in dem Beispiel hier verwenden kann. Eine Query SELECT * FROM fulltable WHERE Year(datum)='2006' and Month(datum)='01' ist IMMER ein nicht optimierbarer Full-Table-Scan. D.h. jeder Datensatz muss angefasst und geprüft werden. Die Abfrage SELECT * FROM fulltable WHERE datum>='2006-01-02' and datum<='2006-01-31' ist dagegen sehr gut optimierbar wenn ein Index über das Feld 'datum' existiert. Für den Fall (und so war es ja anfangs bei dir) das das Datum sogar in einem varchar Feld gespeichert ist kann man auch folgendes verwenden: SELECT * FROM fulltable WHERE datum LIKE '2006-01-%' Erstaunlicherweise ist das sogar manchmal schneller als die Range über das Datum. Warum? Darüber kann man spekulieren oder den Code lesen. Ich vermute mal das ein String Range besser optimiert ist als ein Date-Range. Gruß, Andreas -- Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter -->> http://www.4t2.com/mysql
php::bar PHP Wiki - Listenarchive