2010-10-11 10 views
14

Sto usando MySQL per archiviare i dati dei videogiochi. Dispongo di tabelle per titoli, piattaforme, tag, badge, recensioni, sviluppatori, editori, ecc ...È meglio restituire una query grande o alcune più piccole?

Quando qualcuno sta visualizzando un gioco, è meglio avere una query che restituisce tutti i dati associati a un gioco o è meglio usare più query? Intuitivamente, dal momento che abbiamo recensioni, sembra inutile includerle nella stessa query dato che dovranno essere impaginate. Ma ci sono altre situazioni in cui non sono sicuro se interrompere la query o utilizzare due query ...

Sono un po 'preoccupato per le prestazioni dal momento che ora sto unendo ai giochi le seguenti tabelle: sviluppatori, editori , metatags, badge, titoli, generi, sottogeneri, classificazioni ... per afferrare distintivi di gioco, (da games_badges, molti-a-molti alla tabella dei giochi, e molti alla tabella molti distintivi) Posso fare un altro join, o eseguire una query separata .... e non so quale sia il migliore ....

risposta

7

Non esiste una panacea.

  1. Cerca sempre di ottenere solo i dati necessari.
  2. Non è possibile rispondere se una o più query piccole sono migliori. Ogni caso è unico e per rispondere a questa domanda è necessario profilare la domanda ed esaminare le domande EXPLAIN s
10

È molto più veloce utilizzare una query piuttosto che utilizzare più query perché l'avvio di una query e il calcolo del piano di query stesso sono costoso e l'esecuzione di più query in una riga rallenta il server ogni volta di più. Ovviamente dovresti solo ottenere i dati di cui hai effettivamente bisogno, ma meno query sono sempre migliori.

Quindi, se si sta per mostrare 20 giochi su una pagina, è possibile accelerare la query (utilizzando ancora una sola query) con una clausola LIMIT e solo eseguire quella query più tardi quando si arriva alla pagina successiva. Quello o puoi semplicemente farli aspettare che la query venga completata e avere tutti i dati lì in una volta. Una grande attesa o diverse piccole attese.

tl; dr utilizzare meno query possibili.

+7

uno dovrebbe eseguire un'analisi delle prestazioni prima di venire su con 'significativo Più veloce'. –

+0

Sì, hai ragione nel dire che "significativamente più veloce" è una conclusione. Ciò presuppone che entrambi i set di query forniscano la quantità ottimale di dati. Una query potrebbe essere molto più lenta se si ottengono dati non necessari rispetto a molte query di piccole dimensioni che ottengono solo dati esatti. Le prestazioni delle query –

+0

dipendono non solo dalla quantità di dati restituiti. Ancor più: le prestazioni delle query dipendono dal piano di esecuzione della query, che dipende dalle condizioni della query. – zerkms

3

Questo è generalmente un problema di elaborazione.

  • se fare una query implicherebbe il recupero di migliaia di iscrizioni, chiamare diverse query di avere mysql eseguire l'elaborazione (somme, ecc)
  • se fare più query consiste nel fare decine o centinaia di loro poi chiamare una singola query

Ovviamente si sta sempre di fronte entrambi questi dato che nessuno è un'opzione goto se stai facendo la domanda, quindi le scelte sono davvero:

  1. scegliere quello si può prendere il colpo sul
  2. cache o ridurre il più possibile in modo che si prende un colpo molto raramente
  3. tenta di inserire i dati pre-elaborati nel database per aiutarvi a elaborare i dati attuali
  4. eseguire l'elaborazione come parte di un cron e avere l'applicazione recuperare solo i dati di
  5. fare qualche passo indietro e esplorare altre possibili aproaches che non richiedono l'elaborazione
Problemi correlati