Штрафы за неиспользованные соединения

Я пишу сценарий, который генерирует отчет на основе запроса, который использует несколько таблиц, объединенных вместе. Одним из входных параметров сценария будет список полей, которые требуются в отчете. В зависимости от запрошенных полей некоторые таблицы могут не понадобиться. У меня такой вопрос: существует ли [значительное] снижение производительности за включение соединения, если оно не упоминается в предложениях 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. Но почему-то сомневаюсь, что это так. Конечно, это действительно простой пример. Фактические задействованные данные будут намного сложнее.

И действительно, это не такая уж большая проблема ... Мне просто нужно знать, должен ли мой скрипт быть «умным» в отношении объединений и включать их только в том случае, если поля запрошенный будет полагаться на них.

7
задан Thomas Kelley 2 May 2011 в 16:50
поделиться