Podstawową zasadą pisania zapytań jest to, że każde z nich gruntownie testujemy pod względem wydajności. Do koniecznego minimum należy sprawdzenie planu, jaki MySQL stworzył dla danego zapytania. Służy do tego polecenie EXPLAIN.
Przykładowy wynik działania takiego zapytania może wyglądać na przykład tak.
mysql> EXPLAIN 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;
+----+-------------+------------+--------+-----------------------------+---------------------+---------+---------------------------+------+----------------------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+------------+--------+-----------------------------+---------------------+---------+---------------------------+------+----------------------------------------------+
| 1 | SIMPLE | actor | ref | PRIMARY,idx_actor_last_name | idx_actor_last_name | 137 | const | 3 | Using where; Using temporary; Using filesort |
| 1 | SIMPLE | film_actor | ref | PRIMARY,idx_fk_film_id | PRIMARY | 2 | sakila.actor.actor_id | 1 | Using where; Using index |
| 1 | SIMPLE | film | eq_ref | PRIMARY | PRIMARY | 2 | sakila.film_actor.film_id | 1 | |
+----+-------------+------------+--------+-----------------------------+---------------------+---------+---------------------------+------+----------------------------------------------+
3 rows in set (0.00 sec)
+----+-------------+------------+--------+-----------------------------+---------------------+---------+---------------------------+------+----------------------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+------------+--------+-----------------------------+---------------------+---------+---------------------------+------+----------------------------------------------+
| 1 | SIMPLE | actor | ref | PRIMARY,idx_actor_last_name | idx_actor_last_name | 137 | const | 3 | Using where; Using temporary; Using filesort |
| 1 | SIMPLE | film_actor | ref | PRIMARY,idx_fk_film_id | PRIMARY | 2 | sakila.actor.actor_id | 1 | Using where; Using index |
| 1 | SIMPLE | film | eq_ref | PRIMARY | PRIMARY | 2 | sakila.film_actor.film_id | 1 | |
+----+-------------+------------+--------+-----------------------------+---------------------+---------+---------------------------+------+----------------------------------------------+
3 rows in set (0.00 sec)