Я пишу сценарий, который генерирует отчет на основе запроса, который использует несколько таблиц, объединенных вместе. Одним из входных параметров сценария будет список полей, которые требуются в отчете. В зависимости от запрошенных полей некоторые таблицы могут не понадобиться. У меня такой вопрос: существует ли [значительное] снижение производительности за включение соединения, если оно не упоминается в предложениях SELECT или WHERE?
Рассмотрим следующие таблицы:
mysql> SELECT * FROM `Books`;
+----------------------+----------+
| title | authorId |
+----------------------+----------+
| Animal Farm | 3 |
| Brave New World | 2 |
| Fahrenheit 451 | 1 |
| Nineteen Eighty-Four | 3 |
+----------------------+----------+
mysql> SELECT * FROM `Authors`;
+----+----------+-----------+
| id | lastName | firstName |
+----+----------+-----------+
| 1 | Bradbury | Ray |
| 2 | Huxley | Aldous |
| 3 | Orwell | George |
+----+----------+-----------+
Превосходит ли
SELECT
`Authors`.`lastName`
FROM
`Authors`
WHERE
`Authors`.`id` = 1
:
SELECT
`Authors`.`lastName`
FROM
`Authors`
JOIN
`Books`
ON `Authors`.`id` = `Books`.`authorId`
WHERE
`Authors`.`id` = 1
?
Мне кажется, что MySQL должен просто знать, чтобы полностью игнорировать JOIN, поскольку таблица не упоминается в предложениях SELECT или WHERE. Но почему-то сомневаюсь, что это так. Конечно, это действительно простой пример. Фактические задействованные данные будут намного сложнее.
И действительно, это не такая уж большая проблема ... Мне просто нужно знать, должен ли мой скрипт быть «умным» в отношении объединений и включать их только в том случае, если поля запрошенный будет полагаться на них.