Come è la performance di una stored procedure? Vale la pena usarli invece di implementare una query complessa in una chiamata PHP/MySQL?MySQL Stored Procedure vs. query complessa
risposta
Le procedure memorizzate vi daranno un piccolo incremento di prestazioni, ma principalmente sono per eseguire compiti che sono difficili o impossibili da fare con una semplice query. Le stored procedure sono ottime per semplificare l'accesso ai dati per molti diversi tipi di client. Gli amministratori di database li adorano perché controllano il modo in cui viene utilizzato il database invece di lasciare quei dettagli allo sviluppatore.
Controllare gli indici e il design corretto della tabella per ottenere prestazioni migliori.
In MySQL o in qualsiasi altro server SQL come MSSQL o Oracle, le stored procedure aumentano notevolmente la velocità delle query coinvolte perché sono già state compilate. Le stored procedure sono più sicure delle query dirette e come oggetto nel database possono essere amministrate dal proprietario, dando il giusto accesso a ciascun utente.
Utilizzando le stored procedure è inoltre possibile nascondere la logica delle query e delle procedure e assegnare al team di sviluppo e agli altri programmatori una "scatola nera" in cui inserire parametri e ricevere risultati.
Definitivamente stored procedure rocce !!!!
da MySQL 5.1 Documentazione: routine memorizzati possono essere particolarmente utile in determinate situazioni:
Quando più applicazioni client sono scritte in lingue o di lavoro diversi su piattaforme diverse, ma hanno bisogno di eseguire le stesse operazioni di database.
Quando la sicurezza è fondamentale. Le banche, ad esempio, utilizzano stored procedure e funzioni per tutte le operazioni comuni. Ciò fornisce un ambiente coerente e sicuro e le routine possono garantire che ogni operazione sia registrata correttamente. In tale configurazione, le applicazioni e gli utenti non avrebbero accesso alle tabelle del database direttamente, ma possono eseguire solo routine memorizzate specifiche.
Le routine memorizzate possono fornire prestazioni migliorate poiché è necessario inviare meno informazioni tra il server e il client. Il compromesso è che ciò accresce il carico sul server del database perché più del lavoro viene eseguito sul lato server e meno sul lato client (applicazione). Considerare questo se molte macchine client (come i server Web) sono servite da uno o pochi server di database.
Le routine memorizzate consentono inoltre di disporre di librerie di funzioni nel server di database. Questa è una caratteristica condivisa dai moderni linguaggi applicativi che consentono tale progettazione internamente (ad esempio, utilizzando le classi). L'utilizzo di queste funzionalità del linguaggio dell'applicazione client è vantaggioso per il programmatore anche al di fuori dell'ambito di utilizzo del database.
Come ricordato a me in una risposta precedente per gentile concessione di JohnFX:
"Il vantaggio delle prestazioni di stored procedure è dubbia e minimale al migliore Alcuni materiale di lettura su questo punto:.
http://statestreetgang.net/post/2008/04/My-Statement-on-Stored-Procedures.aspx
http://betav.com/blog/billva/2006/05/are_stored_procedures_faster_t.html
Divertiti.
Molto semplificato - Le prestazioni della stored procedure sono uguali o marginalmente migliori rispetto al codice al costo del carico del server DB. Poiché la maggior parte dei sistemi db riguarda l'accesso multiutente e utilizza hardware di base per il server db, l'utilizzo del codice offloading del server db probabilmente vincerà in generale. Con server DB di fascia alta,> 4 core,> 32 GB di RAM, il carico SP spesso non è un problema.
procedure memorizzate;
- trasferimento meno dati nella query - miglioramento della velocità minima per il codice ben scritto
- parsing & cache è "leggermente migliore" - miglioramento della velocità minima per il codice ben scritto
- spostare il carico di esecuzione al server db contro client (server web), potenzialmente diffondendo il carico su molti sistemi. - i miglioramenti della velocità dipendono molto dal codice effettivo e dalla quantità di dati, inclusi i dati "in eccesso" trasferiti. Un bel po 'di codice trasferisce più dati di quelli effettivamente utilizzati (librerie db, query scritte male, selezionare *, ecc.)
Non ottimizzare in anticipo.
Le procedure memorizzate hanno molti altri vantaggi rispetto alla velocità, la sicurezza è in cima alla lista.
In un unico ambiente programmatore, i benefici possono essere compensati dalla curva di programmazione SP di apprendimento, framework di test SP, diversi metodi di controllo di revisione - SP e il codice, ecc ..
apprendimento e l'utilizzo di un test e profiling quadro sarà rispondi in modo definitivo e ti guiderà nel fornire migliori "prestazioni" alla tua app rispetto alla semplice scelta di SP o query ad hoc.
Rispondere a "vale la pena" - Se non si dispone di un framework di testing/profiling, si sta solo indovinando. Qualsiasi risposta basata sul mio codice e sull'hardware è probabilmente irrilevante per il tuo.
La mia esperienza del mondo reale su molte applicazioni web Perl/TCL/PHP/C che utilizzano i processi di memorizzazione di DB (Sybase, Oracle, MS SQL, MySQL, Postgres) NON migliora enormemente le prestazioni. Ma li uso ancora spesso, solo per ragioni diverse dalle prestazioni. Possono migliorare notevolmente una query complessa specifica, ma raramente sono la maggior parte del codice e il tempo di elaborazione complessivo.
Yikes Odio per qualcuno leggere queste risposte e avere l'impressione sbagliata. Ci sono alcune differenze davvero importanti tra le implementazioni "Stored Whatever" su "MySQL" vs "SQL server/Oracle".
See: http://www.joinfu.com/2010/05/mysql-stored-procedures-aint-all-that/
Ogni persona che fa questa domanda presuppone qualcosa su implementazione di stored procedure di MySQL; credono erroneamente che le stored procedure siano compilate e memorizzate in una cache di stored procedure globale, simile alla cache della stored procedure in Microsoft SQL Server [1] o Oracle [2].
Questo è sbagliato. Flat-out errato.
Ecco la verità: Ogni singola connessione al server MySQL mantiene la propria cache di stored procedure.
Prendere un minuto per leggere il resto dell'articolo e commenti. È breve e avrai una comprensione molto migliore dei problemi.
- 1. MySQL (stored procedure) - parametri e query
- 2. MySQL Stored Procedure vs PHP script
- 3. Autorizzazioni stored procedure MySQL
- 4. mysql stored-procedure: parametro di
- 5. Richieste multiple VS Stored procedure
- 6. query SELECT mySQL complessa?
- 7. Chiamare una stored procedure in una stored procedure in MySQL
- 8. Stored procedure vs nessuna stored procedure - Security Viewpoint
- 9. stored procedure query di eliminazione
- 10. MySQL: IF in stored procedure
- 11. MySql stored procedure else if e le query multiple
- 12. MySQL stored procedure o codice php?
- 13. SQL dinamico vs stored procedure - pro e contro?
- 14. MySql stored procedure, transazioni e rollback
- 15. Come/quando mysql compila le stored procedure?
- 16. Esegui MySQL stored procedure utilizzando Command Line
- 17. Esecuzione sincronizzata della stored procedure in mysql
- 18. MySQL: Come modificare le stored procedure atomicamente?
- 19. Perché la stored procedure è più veloce della query
- 20. SQL Stored Procedure LIKE
- 21. DocumentDB chiamata stored procedure da un'altra stored procedure o stessa
- 22. Chiamare una stored procedure definita dall'utente dall'istruzione select mysql
- 23. Salvati rotto stored procedure
- 24. Chiamata stored procedure in codeigniter
- 25. Differenza tra stored procedure e stored procedure estese
- 26. Come chiamare una stored procedure da un'altra stored procedure?
- 27. stored procedure con risultati condizionali
- 28. UNION condizionale in stored procedure
- 29. chiama stored procedure da solr
- 30. Domande parametrizzate SENZA stored procedure?
MySQL NON compila le stored procedure prima di eseguirle in una sessione stabilita a partire dalla versione corrente –