2012-09-28 9 views
6

że wykonane bardzo prosty sposób (pętla, a) w mysqlMySQL bardzo powoli pętli

BEGIN 

    DECLARE start INT; 
    DECLARE ending INT; 

    SET start = 1; 
    SET ending = 4000000; 

    WHILE (start <= ending) DO 
     SET start = start + 1; 
    END WHILE; 
END 

przy tej ~ 26 sekund w podwójnym urządzeniu rdzeniowej (każdego rdzenia o 100%) i nie zrozum dlaczego.

Czy możesz dać mi odpowiedź?

+1

SQL nie jest językiem programowania, w którym pętla jest bardzo szybka. –

+0

@juergen d: nie jest "_nie bardzo szybki_", jest powolny jak diabli ... To ** 8-9 TYSIĘCE ** razy wolniej niż średnia pętla. – recis

Odpowiedz

3

Tak, przechowywane procedury są bardzo powolne w porównaniu do innych języków programowania, takich jak C# lub Java. Mądrość obliczeniowa. Ten sam kod byłby powolny również w SQL Server. Prawdopodobnie jest szybszy od MySQL, ale nadal będziesz czekał kilka sekund, aż zostanie całkowicie wykonany. Będzie ci lepiej, robiąc to w języku programowania, który kończy to zadanie w ciągu sekundy.

Więc innymi słowy:

Niska wydajność procedura przechowywana jest jednym z powodów, dlaczego zazwyczaj nie jest mądry, aby realizować kosztowne obliczeniowo logikę biznesową w bazie danych. Ponieważ sieci nie są wąskim gardłem, które kiedyś były, często lepiej jest wyodrębnić dane do warstwy aplikacji i przetworzyć je w wybranym języku programowania, nawet jeśli wymaga to kilku dodatkowych, rundowych wycieczek do bazy danych.