Mailinglisten-Archive |
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Andreas Müller schrieb: > Hallo Sebastian, > wie ich schon letztens ausgeführt habe kann MySQL keine Funktionsaufrufe > optimieren. du meinst MySQL macht einen Unterschied ob es die Daten aus dem Index verwendet oder die Daten aus einem Full-Table-Scan zieht daran fest ob eine Funktion über die Daten läuft oder nicht? Warum? Die Daten sind doch die selben! MySQL macht als nur weil ich eine Funktion verwende einen Full-Table-Scan obwohl es die Daten bereits im Index hat, welchen er ja auch verwenden würde wenn ich keine Funktion nehme? > Daher wäre folgendes immer ein full table scan und daher extrem langsam. > >> WHERE EXTRACT(YEAR_MONTH FROM `datum`) = 'yyyymm'; >> WHERE DATE_FORMAT(`datum`, "%Y%m") = 'yyyymm'; > > Handelt es sich in dem Fall um ine DateTime Feld so führt MySQL die Abfrage > zwar aus - es wird aber auch hier nichts optimiert und es wird ein full 'nichts' ist etwas übertrieben, immerhin ist es nur Einer anstelle von zwei Funktionsaufrufen ... ;-) > table scan durchgeführt. Handelt es sich um ein varchar Feld dann gilt das > hier ein Index verwendet wird und sogar manchmal schneller ist als ein Range > über ein DateTime Feld. > >> WHERE `datum` LIKE 'xxxx-xx-__'; > > Das, oder die normale schreibweise ohne BETWEEN ist die optimale Abfrage für > DateTime Felder: >> WHERE `datum` BETWEEN 'xxxx-xx-00' AND 'yyyy-yy-00'; > > WHERE `datum`>='xxxx-xx-00' AND `datum`<='yyyy-yy-00'; - -- Sebastian Mendel www.sebastianmendel.de -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.3 (MingW32) iD8DBQFEknQnX/0lClpZDr4RAtkoAJ95Z4rNWECIdUrd61rB6QZUsLDmCQCfTcwf mIu4W69i7kQGs3BI6BREAvQ= =jJ4W -----END PGP SIGNATURE----- -- Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter -->> http://www.4t2.com/mysql
php::bar PHP Wiki - Listenarchive