Podczas tworzenia nowych, bądź modyfikowania starych zapytań kluczową kwestią jest sprawdzenie, jak dane zapytanie zachowuje się w różnych warunkach. Dlaczego jest to tak ważne? Weźmy pod uwagę następujące zapytanie:

SELECT first_name, last_name, title FROM film LEFT  OUTER JOIN film_actor USING (film_id) LEFT OUTER JOIN actor USING  (actor_id) WHERE first_name='PENELOPE' AND last_name='GUINESS' ORDER BY  title DESC;

Podczas przeprowadzania jego analizy (http://blog.ksiazek.info/2010/04/09/benchmark-i-profiling/) okazało się, że przydatny może się okazać indeks nałożony na kolumny first_name i last_name w tabeli `actor`.
Po sprawdzeniu wyników okazuje się, że dodanie tego indeksu nieznacznie zmniejszyło czas wykonywania zapytania (tabela `actor1` zawiera dodatkowy indeks):

|       14 |  0.00054000 | SELECT SQL_NO_CACHE first_name, last_name, title FROM film  LEFT OUTER JOIN film_actor USING (film_id) LEFT OUTER JOIN actor1 USING  (actor_id) WHERE first_name='PENELOPE' AND last_name='GUINESS' ORDER BY  title DESC     |
|       15 | 0.00062100 | SELECT SQL_NO_CACHE  first_name, last_name, title FROM film LEFT OUTER JOIN film_actor USING  (film_id) LEFT OUTER JOIN actor1 USING (actor_id) WHERE  first_name='PENELOPE' AND last_name='GUINESS' ORDER BY title DESC     |
|        16 | 0.00051900 | SELECT SQL_NO_CACHE first_name, last_name, title FROM  film LEFT OUTER JOIN film_actor USING (film_id) LEFT OUTER JOIN actor1  USING (actor_id) WHERE first_name='PENELOPE' AND last_name='GUINESS'  ORDER BY title DESC     |
|       17 | 0.00047700 | SELECT  SQL_NO_CACHE first_name, last_name, title FROM film LEFT OUTER JOIN  film_actor USING (film_id) LEFT OUTER JOIN actor USING (actor_id) WHERE  first_name='PENELOPE' AND last_name='GUINESS' ORDER BY title DESC      |
|        18 | 0.00045100 | SELECT SQL_NO_CACHE first_name, last_name, title FROM  film LEFT OUTER JOIN film_actor USING (film_id) LEFT OUTER JOIN actor  USING (actor_id) WHERE first_name='PENELOPE' AND last_name='GUINESS'  ORDER BY title DESC      |
|       19 | 0.00046100 | SELECT  SQL_NO_CACHE first_name, last_name, title FROM film LEFT OUTER JOIN  film_actor USING (film_id) LEFT OUTER JOIN actor USING (actor_id) WHERE  first_name='PENELOPE' AND last_name='GUINESS' ORDER BY title DESC      |

To samo okazuje się, gdy wykonamy prosty benchmark przy pomocy skryptów php:
– indeks – 3834.18 zapytań na sekundę
– bez indeksu – 3923.48 zapytań na sekundę
czytaj dalej…