Эрвин: Я бы согласился с идеей, что ИСПОЛЬЗОВАНИЕ, вызывающее жесткое упорядочение, вполне может создать множество крайних случаев, когда оптимальные планы будут исключены. Я недавно помог кому-то, у кого было что-то подобное в его запросе:
LEFT JOIN (
a
JOIN b ON a.id = b.a_id
JOIN c ON b.c_id = c.id
) ON a.id = something.a_id
LEFT JOIN (
table1 t1
JOIN table2 t2 ON t1.some_field = t2.other_field
JOIN talbe3 t3 ON t2.yafield = t3.something_else
) ON ....
repeat a few more times
В его случае наихудшим из этих блоков соединения было соединение с вложенным циклом через примерно 200 тыс. Строк, примерно 20 тыс. Раз (делайте математические расчеты), и поскольку ключи не могли быть переданы в индексы, это было последовательное сканирование. Это означало, что общий запрос занимал около 3 часов из-за каскадных изменений плана. Распределение левого соединения позволяет нажимать клавиши и выполнять запрос за считанные секунды. Конечно, это не совсем эквивалентно, поэтому планировщик не может рассматривать их как эквивалентные, поэтому осталось выяснить этот план как хеш-соединение, а затем выполнить вложенный цикл, который был мучительно медленным.
Каждый раз, когда вы жестко заставляете соединения проходить в определенном порядке, вы представляете случаи, когда информация о фильтре ключа может быть еще недоступна при выполнении плана, и поэтому, что может быть возможно сделать позже при быстром сканировании индекса / соединении хэшей может потребоваться сделать намного медленнее во вложенном цикле / последовательном сканировании, поэтому, хотя приведенный выше фрагмент не является сразу эквивалентным, он показывает ту же проблему
USING
немного быстрее - это приводит к уменьшению на один столбец в матрице результатов. Ваши выводы датируются 2005 и 2008 годами. Я предполагаю, что все проблемы уже исправлены. Тем не менее , я вижу возможное ограничение: Соединения с,USING
возможно, должны быть применены по порядку , так как результирующий столбец соединения является совместным продуктом. Тем самым потенциально ограничивающие возможности при переупорядочении СОЕДИНЕНИЙ.