C'è un guadagno in termini di prestazioni gestendo i dati con procedure memorizzate anziché inserendoli in funzioni dopo il recupero?


8

Il titolo lo riassume. Sono ragionevolmente benestante con PHP e mi sento a mio agio nel fare ciò di cui ho bisogno con i valori estratti da MySQL, tuttavia nell'interesse di espandere la mia conoscenza mi sono chiesto se forse sarebbe una tecnica più efficiente nel lunga corsa. Sono equivalenti (a causa della stessa quantità di elaborazione alla fine) o ci sono casi in cui uno presenta un netto vantaggio rispetto all'altro?


3
Buona domanda e punto di discussione di lunga data .. quanto sarà nel lato APP, quanto sarà fatto nel lato DB. Potresti voler riformularlo in "RDBMS in APP-Layer", perché la domanda si applica a tutti i tipi di interazioni tra DB e APP.
Sebastian Roth,

2
Voglio aggiungere a questa domanda così male, ma non ho nulla di interessante da aggiungere. Questa è una grande domanda, e non mi dispiacerebbe diventare una
domanda

In realtà stavo pensando di porre questa domanda, se sarebbe stato in tema qui per i DBA. Ho cercato qualcosa di completamente diverso e l'ho trovato per caso. Quindi +1 per avermi letto
Derek Downey

Risposte:


6

Dipende molto da cosa stai facendo con i record e da come appare la tua architettura di rete. Ad esempio, se la procedura memorizzata ridurrà la quantità complessiva di dati trasmessi da MySQL a PHP e si ha un collegamento relativamente lento tra l'istanza di PHP e il database, un SP potrebbe sicuramente aiutarti.

Ti consiglierei di iniziare con alcune delle manipolazioni 'più pesanti' che fai ai tuoi dati sul lato PHP, vedere cosa puoi scrivere come SP e poi confrontarli.


5

Un punto a favore di una maggiore elaborazione nel database è che il database non può ottimizzare ciò che non vede. Ad esempio, l'impostazione di una proprietà di una classe persistente su un valore costante per tutte le istanze avrà sicuramente prestazioni migliori se eseguita nel livello del database.

Un punto a sfavore è che i database sono efficaci nelle operazioni basate su set, ma non altrettanto efficaci nelle operazioni basate su righe. Ad esempio, qualcosa di simile alla conversione di un'ora UTC in ora locale basata su un fuso orario che varia per riga potrebbe non funzionare altrettanto bene nel database come nel livello dell'app.


Un punto eccellente sull'ottimizzatore.
TML

2

Di solito se il risultato è un'aggregazione (somma, media, conteggio) è molto più veloce essere calcolata nel server di database, evitando comunicazioni inutili tra il server e il client. Inoltre, l'ordinamento e il raggruppamento possono beneficiare degli indici, riducendo la quantità di calcolo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.