2012-09-28 15 views
6

ho fatto una procedura molto semplice (un ciclo while) in MySQL:MySQL molto lento ciclo

BEGIN 

    DECLARE start INT; 
    DECLARE ending INT; 

    SET start = 1; 
    SET ending = 4000000; 

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

Questo richiede ~ 26 secondi su una macchina dual core (ogni core a 100%) e non fare capisci perché

Potresti darmi una risposta?

+1

SQL non è un linguaggio di programmazione in cui il looping è molto veloce. –

+0

@juergen d: non è "_non molto veloce_", è lento come l'inferno ... È ** 8-9 MILA ** tempi più lenti di un ciclo medio. – recis

risposta

3

Sì, le stored procedure sono molto lente rispetto ad altri linguaggi di programmazione come C# o Java. Saggio computazionale che è. Lo stesso codice sarebbe lento anche in SQL Server. Probabilmente più veloce di MySQL, ma aspetteresti ancora alcuni secondi fino a quando non sarà completamente eseguito. Farai meglio a farlo in un linguaggio di programmazione, che completa tale compito in meno di un secondo.

Quindi, con altre parole:

rallentare le prestazioni stored procedure è uno dei motivi per cui di solito non è saggio per implementare la logica di business computazionalmente costoso nel database. Con le reti che non rappresentano il collo di bottiglia che una volta erano, spesso è meglio estrarre i dati dal livello dell'applicazione e elaborarli nel linguaggio di programmazione di tua scelta, anche se questo richiede qualche giro aggiuntivo nel database.