Ogni volta che faccio sviluppo web e una pagina impiega più di mezzo secondo per essere generata, so che da qualche parte il mio codice sta colpendo il DB troppe volte. Il modo normale per risolvere questa situazione è chiedere al DB tutte le informazioni contemporaneamente, facendo JOINs e cose simili.
La mia domanda è: perché molte query sul database rendono una pagina lenta? Ci deve essere un sovraccarico considerevole per ogni query, ma che cos'è?
EDIT : Ok, facciamo un esempio (è un po 'sciocco e piccolo, ma lo farà)
people
table:
| name | football_team_id |
+------+------------------+
| jim | 1 |
| mike | 3 |
| carl | 2 |
football_team
table:
| id | color |
+----+-------+
| 1 | red |
| 2 | blue |
| 3 | green |
Sappiamo tutti che questo è lento:
SELECT name,football_team_id FROM people;
# start rendering the page, realise we need colors
SELECT color FROM football_team WHERE id=1
# oops, need mike's color
SELECT color FROM football_team WHERE id=3
# oh, and carl's
SELECT color FROM football_team WHERE id=2
Questo è un po 'meglio:
SELECT name,football_team_id FROM people;
SELECT id,color FROM football_team WHERE id IN (1,3,2)
Questo è il migliore:
SELECT name,football_team_id,color FROM people JOIN football_team ON people.football_team_id=football_team.id
In ogni esempio riceviamo la stessa quantità di dati, ma quest'ultima è facilmente la più veloce.
Non ti aspetteresti lo stesso comportamento se ad esempio stai leggendo da un descrittore di file.