2009-07-20 17 views

risposta

15

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.

2

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.

+0

MySQL NON compila le stored procedure prima di eseguirle in una sessione stabilita a partire dalla versione corrente –

2

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;

  1. trasferimento meno dati nella query - miglioramento della velocità minima per il codice ben scritto
  2. parsing & cache è "leggermente migliore" - miglioramento della velocità minima per il codice ben scritto
  3. 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.

8

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.

Problemi correlati