Учитывая этот сценарий в Oracle SQLЭффективность присоединиться к таблице или присоединиться выберите * из таблицы
select * from a join b;
против
select * from a join (select * from b);
против
select * from a join (select col1 from b);
предположить в последнем сценарии есть в не менее 5 столбцов в b.
В такой ситуации было бы быстрее присоединяться напрямую или быстрее, чтобы присоединиться к выбору?
Что делать, если соединение с выбранным не выбирает все столбцы, а их крошечную часть.
P.S. пожалуйста, извините псевдокод.
Не существует платформы SQL, которая не позволяет вам взглянуть на план выполнения. Вы можете просто взглянуть на план выполнения и увидеть, что первые два кросс-соединения одинаковы. Немой, чтобы выполнить крест, он будет очень медленным и редко нужен. Но то же самое. – Hogan
Нельзя указывать столбцы соединения, например, если вы присоединяетесь к B в col1 и выбираете col2, и у вас есть индекс в col1, col2, тогда Oracle будет читать только индекс. Если включить все данные столбцов из таблицы B, тогда таблица должна быть прочитана, что, конечно, будет дороже. При перекрестном объединении, даже если выбранный столбец индексируется, Oracle все равно выполнит полное сканирование таблицы, так как индекс не будет включать в себя значения, которые должны быть включены в перекрестное соединение. Если у вас есть сомнения - PLAY EXPLAIN - ваш друг! –
@MichaelBroughton - если нет столбцов объединения, то это кросс-соединения. Почему предположить, что пользователь не хочет перекрестных соединений? – Hogan