phpbar.de logo

Mailinglisten-Archive

Tabelle voll - was nun ...

Tabelle voll - was nun ...

Sebastian Mendel lists at sebastianmendel.de
Fre Jun 16 11:04:39 CEST 2006


-----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