2011-12-30 1 views
5

Intendiamo utilizzare le stored procedure mysql per gestire tutto il lavoro del database per un progetto. Esistono diverse applicazioni (lingue diverse) che utilizzano lo stesso database e sono abbastanza sicuro che ci sia una buona quantità di codice SQL ripetuto su quelle app.Come/quando mysql compila le stored procedure?

E poi durante la lettura qualcosa su mysq sono incappato in
http://www.joinfu.com/2010/05/mysql-stored-procedures-aint-all-that/
articolo fondamentalmente dice che le stored procedure vengono compilati ogni volta nuova connessione db è fatto.
MySQL compilerà le procedure memorizzate ALL (almeno per 3 cifre) sul database?

+1

Direi che l'articolo che hai collegato risponde alla tua domanda. – hakre

+1

Sì, direi anche questo. È solo che avevo una sorta di speranza che qualcosa come "Oh, questo non è vero per ver 5.5 e successive di mysql". – grizwako

+0

Nei commenti del tuo articolo collegato, una discussione si evolve con l'essenza, che le cose sono migliorate in 5.5 mentre non è sfacciatamente così i database –

risposta

5

No. Le procedure di query e stored sono compilate su richiesta e quindi conservate in una cache per un po '. Se si utilizza ripetutamente una stored procedure specifica, verrà utilizzata la versione compilata nella cache, ma se non è più nella cache, questa deve essere compilata per prima, come qualsiasi altra query inviata a un database.

Ciò che MySQL certamente non farà è compilare tutte le centinaia di stored procedure contemporaneamente, nel caso in cui fosse ciò di cui avevi paura.

Ma tutto ciò è in qualche modo irrilevante Il vantaggio delle stored procedure è che è possibile assicurarsi che più applicazioni che utilizzano lo stesso database utilizzino allo stesso modo. Quando la tua performance è tale che inizi a guardare la cache della compilation per la velocità, stai guardando nel posto sbagliato. L'ottimizzazione della velocità viene eseguita meglio attraverso la query o la riprogettazione del database.

+0

devono essere accecati rapidamente. Dopo aver ottimizzato le tue query e la progettazione e gli indici del database, ** come ** altro riusciresti a ottimizzare per velocità? – Pacerier

+0

Hardware più veloce, cache di memoria più grandi, dischi rigidi più veloci, altri motori di archiviazione. Naturalmente questo è dopo aver aggiunto gli indici per accelerare le query, ecc ... Inoltre, sii consapevole dei blocchi: quando il contenuto di una tabella viene modificato per tutto il tempo in cui è bloccato per ogni modifica, mantenendo così le query. C'è tutta una scienza dietro questo e se fossi in te farei una nuova domanda e non aggiungere un commento a una risposta di 4 anni in quanto ci sono molte risposte a questa domanda. – Matijs

3

MySQL non compilerà tutte le stored procedure contemporaneamente. Saranno eseguiti su richiesta come domande come da requisiti e quando li chiamate.

Con una stored procedure, tuttavia, il database compila una volta il piano di query e riutilizza il processo compilato. Questa pre-compilazione può dare un significativo vantaggio in termini di prestazioni.