2010-01-29 21 views
6

Stavo cercando un CMS da utilizzare e ho eseguito una recensione su vBulletin 4.0; utilizzando circa 200 query su un caricamento di una pagina.Quanta query SQL è troppa query SQL?

Ero quindi preoccupato.

ulteriori ricerche mi ha portato ad altri siti per vedere quanto le query stanno usando e ho scoperto che alcuni software forum come Invision Power Board e phpBB stanno utilizzando query a partire da 6 o 8.

Attualmente, il mio sito utilizza circa 25 a 40 query.

Dovrei essere preoccupato?

risposta

11

Non essere preoccupati numero di domande.

essere di circa preoccupato:

  1. caricamento delle pagine troppo lentamente
  2. Lo SQL essere troppo complicato da mantenere.

Chiarimento:

SQL essere troppo complicato può venire sia da troppe domande o un paio di domande che sono molto complicati (un sacco di join e query sub, ecc).

+2

Corretto. Ridurre il numero di query potrebbe essere un buon obiettivo, ma se la pagina funziona correttamente, non lasciare che il conteggio delle query ti impedisca di lavorare su cose più importanti. –

+1

Sono d'accordo, preoccupati solo di questo quando si tratta di un problema (e spero che vedrai quelli che arrivano). "L'ottimizzazione prematura è la radice di tutti i mali" - Knuth –

+0

+1 Non l'avevo mai sentito prima [Knuth]. Lo adoro! –

9

Se si mira a qualcosa, mirare a 3 letture e 1 scrittura per hit HTTP.

Mentre questi sono numeri arbitrari (in qualche modo, sono in realtà prese dalla Advanced PHP Programming), essi sottolineano le idee:

  • il numero di SQL andata e ritorno dovrebbe essere basso, sotto i 10 anni di sicuro, per chiamata HTTP
  • c'è una differenza tra letture e scritture, e il rapporto dovrebbe favorire le letture. scrive creare contesa

Ricordate anche che non tutte le letture sono uguali: il 3 legge dovrebbe essere altamente ottimizzato legge, non le scansioni di tabella completa con 4-5 outer join ...

0

Depende. Più colpisci il db, più carichi hai. Solo alcune cose da cercare. Se è necessario visualizzare i valori da diverse tabelle diverse, sarà probabilmente necessario eseguire diverse query. Se hai solo un paio di utenti e sai che non avrai molti dati, probabilmente non importa.

Alcune cose da considerare:

  • Stai usando la stessa query più volte al caricamento della pagina? Se riesci a riutilizzare il risultato, fallo.
  • Stai eseguendo una query per risultato di un'altra query? Se è così, magari consentire al DB di fare il join e fare solo una tirata.

Se la tua pagina è lenta a colpire troppo il db, guarda a memcached.

0

Si potrebbe provare a rielaborare il codice nel tempo per ridurre il numero di round trip a SQL Server. Un modo per farlo potrebbe essere quello di utilizzare il caching.Ad esempio, i dati necessari di frequente possono essere caricati all'avvio dell'applicazione, quindi prelevati dalla cache quando è necessario.

Un altro approccio potrebbe essere quello di de-normalizzare i dati in tabelle che sono specificamente progettate per fornire i dati richiesti dal sito in un numero inferiore di query.

0

Considerare anche se alcune di quelle query (quelle che si utilizzano per popolare i valori di ricerca, ad esempio) possono essere memorizzate nella cache. In questo modo se la stessa query viene richiamata su più pagine o ogni volta che si passa da un gruppo di record a un altro, il database non viene nuovamente colpito per eseguire exaclty la stessa query. Ricordo una volta che stavamo cercando di capire perché il sito era così lento quando il proc memorizzato che era in esecuzione era molto veloce e ho trovato che usando profiler veniva inviato più e più volte quando non era necessario.

0

È possibile memorizzare tutte le query con vbulletin nella cache. Se guardi pbnation.com hanno oltre un milione di visitatori al giorno e solo circa 3-4 query per caricamento della pagina. Tutto il resto è memorizzato nella cache in memcached.