phpbar.de logo

Mailinglisten-Archive

Tabelle voll - was nun ...

Tabelle voll - was nun ...

Andreas Müller mysql at universalware.de
Die Jun 13 22:12:28 CEST 2006


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