secret_3des
Lieutenant
- Registriert
- Sep. 2005
- Beiträge
- 822
Hi!
Ich dachte eigentlich, dass UDFs (User defined functions) in MySQL performant sind, da sie (meines Wissens) in reines C übersetzt werden. Dem ist aber scheinbar nicht so.. Hat jemand eine Erklärung dafür? Bzw. weiß jemand wieso die folgende UDF so langsam ist?
Also hier eine UDF:
Wenn ich die Funktion dann in einer Query über eine Test-Tabelle mit 100.000 Einträgen laufen lasse:
Dann dauert das 0,8957 Sekunden (laut MySQL Query Browser)
Das ganze in eine SQL-Query verpackt:
dauert 0,5777 Sekunden. Also ist etwa 64% schneller.. Wenn man dann natürlich mehrere solcher UDFs in einer Query einsetzt, ist der Unterschied noch höher (bzw. summiert sich noch höher auf).
Woran liegt es also? Im Prinzip läuft doch das gleiche ab..
Viele Grüße,
Tom
Ich dachte eigentlich, dass UDFs (User defined functions) in MySQL performant sind, da sie (meines Wissens) in reines C übersetzt werden. Dem ist aber scheinbar nicht so.. Hat jemand eine Erklärung dafür? Bzw. weiß jemand wieso die folgende UDF so langsam ist?
Also hier eine UDF:
Code:
delimiter //
CREATE FUNCTION around (val DOUBLE, around_val DOUBLE, d DOUBLE) RETURNS INT
BEGIN
RETURN CEIL(ABS((val-around_val)) / d);
END;
//
Code:
SELECT *, around (km, 30000, 1000) FROM cars100000;
Das ganze in eine SQL-Query verpackt:
Code:
SELECT *, ceil(abs(30000.0 - km) / 1000.0) FROM cars100000;
Woran liegt es also? Im Prinzip läuft doch das gleiche ab..
Viele Grüße,
Tom