Considerare un sito in cui le persone votano su (+1) o giù (-1) sul loro colore preferito e ho due tabelle:Qual è il metodo SELECT più efficiente e perché?
Un elenco di tutti i colori per cui le persone possono votare e la seconda tabella registra ogni singolo voto fatto, di che colore era e se era +1 o -1.
Per quanto riguarda il recupero voto complessivo per un colore specifico, sarebbe più efficiente includono un punteggio complessivo sul tavolo i colori e quando una persona vota c'è una dichiarazione di inserimento e un'istruzione di aggiornamento:
INSERT INTO votes (colour,vote) VALUES (red,-1);
UPDATE colours SET score=score-1 WHERE colour='red';
SELECT score FROM colours WHERE colour='red';
Oppure sarebbe più efficiente avere una sola istruzione INSERT quando viene effettuata una votazione, e poi recuperare il punteggio;
SELECT SUM(vote) AS score FROM votes WHERE colour='red';
Credo che quando c'è un piccolo numero di voti quindi l'opzione # 2 è migliore, ma vuol opzione # 1 diventano meglio quando il tavolo voti è molto grande?
C'è qualche strumento che posso usare per dare un tipo di classifica su alcune query SQL a seconda delle dimensioni della tabella, ecc?
Ah scuse. Ho dimenticato di menzionare che le tabelle che registrano i voti individuali sono obbligatorie, quindi il tavolo deve essere lì indipendentemente dall'opzione che prendo. – Alwayslearning
Quanto ti aspetti che il tuo tavolo sia grande? Lì * sarà * un punto oltre il quale 'SUM()' sarà notevolmente più lento. –