#performance #oracle #join #table-alias
#Производительность #Oracle #Присоединиться #таблица-псевдоним
Вопрос:
Я написал запрос sql join в oracle с двумя таблицами. При написании запроса я не использовал псевдоним таблицы для ссылки на столбец в предложении select. Теперь это стало возможным, потому что выбранные столбцы имели разные имена в обеих таблицах.
Итак, возникает вопрос; необходимо ли (с точки зрения производительности) использовать псевдоним таблицы для выбора столбца, независимо от того, есть ли какое-либо похожее имя столбца в обеих таблицах?
Пожалуйста, обратите внимание: прямо сейчас у меня создается впечатление, что «В случае запроса join, когда мы не указываем псевдоним таблицы для выбора столбца, oracle всегда будет искать метаданные таблицы, чтобы узнать, в какой таблице есть этот столбец». Так верно ли мое предположение?
Спасибо, ханумант
Ответ №1:
Нет, ваше предположение неверно.
Существует как минимум четыре причины использовать псевдонимы таблиц:
- Если псевдоним короче имени, это позволяет вводить меньше.
- Если вы самостоятельно объединяете таблицу, вам необходимо присвоить псевдоним одной или обеим таблицам, чтобы вы могли различать их.
- Производные таблицы должны иметь псевдоним в некоторых системах баз данных (я думаю, не Oracle).
- Псевдоним может прояснить, какова роль таблицы в этом конкретном запросе.
Их использование не приводит к существенному снижению производительности.
Комментарии:
1. итак, как oracle разрешает таблицу из имени столбца без псевдонима, ему нужно выполнить поиск в своей внутренней таблице объектов, чтобы правильно определить отношение столбца к таблице?
2. Очевидно, что он должен знать, какие столбцы принадлежат каким таблицам, но это верно независимо от того, используете вы псевдонимы таблиц или нет.
3. Итак, если ему нужно что-то искать, то указание псевдонима таблицы в предложении select снижает нагрузку на oracles или все же oracle ищет свою собственную таблицу?
4. Вы должны понимать, что вы говорите о чем-то, что, если бы это имело эффект, было бы настолько незначительным, что вы никогда не смогли бы создать достоверный тестовый пример, чтобы доказать его существование. Он уже должен проверять правильность имен столбцов при синтаксическом анализе SQL независимо от псевдонима или нет.
5. Просто чтобы добавить к ответу Марка, еще одна причина использования псевдонимов заключается в том, что если ваша схема SQL изменится (особенно при разработке в гибком стиле), кто-то может добавить
status
столбец в другую таблицу, а затем ваш запрос будет нарушен, затраты на поддержание и проверку множества разных запросов в этой ситуации являются проблемой.тяжелая нагрузка на тестировщиков.
Ответ №2:
Чтобы упростить…
Это не удается
select
ID,
ID
from table1
inner join table2 on table1.ID = table2.AnotherID
Это не сбой
select
a.ID,
b.ID
from table1 a
inner join table2 b on a.ID = b.AnotherID
Причина первого сбоя заключается в том, что механизм оптимизации не знает, из какой таблицы извлекать поле ID. С помощью псевдонима вы даете ему «подсказку» относительно того, какую таблицу использовать. Псевдоним — это просто замена полного имени таблицы.
Вы также должны быть осторожны при попытке получить доступ к таблицам с псевдонимами. Для получения дополнительной информации об этом ознакомьтесь с порядком операций SQL.