Теоретически, почему внутреннее соединение работает значительно быстрее, чем левое внешнее соединение, учитывая тот факт, что оба запроса возвращают одинаковый набор результатов. У меня был запрос, который потребуется много времени, чтобы описать, но это то, что я видел, изменяя одно соединение: left external join - 6 секунд, внутреннее соединение - 0 сек (остальная часть запроса такая же). Вывод: тот жеSQL Server скорость: левое внешнее соединение против внутреннего соединения
ответ
На самом деле в зависимости от данных, левое внешнее соединение и внутреннее соединение не будет возвращать тот же results..most вероятно, левое внешнее соединение будет иметь больше результата и снова зависит от данных ..
Я не уверен, почему это ответ, а не комментарий. Хотя верно, что левое соединение может возвращать больше результатов в случаях, когда в правой таблице нет соответствующих строк, OP ясно указала, что в его случае два * do * производят идентичные строки. Это может быть связано с неверным запросом (например, критерии соединения/фильтра не в правильном месте), но может быть, что в левой таблице нет строк без соответствия в правой таблице. –
Я был бы обеспокоен, если бы изменил левое соединение на внутреннее соединение, и результаты не были разными. Я подозреваю, что у вас есть условие в левой части таблицы в разделе where эффективно (и, вероятно, неправильно), превращая его в внутреннее соединение.
Что-то вроде:
select *
from table1 t1
left join table2 t2 on t1.myid = t2.myid
where t2.somefield = 'something'
Который не то же самое, как
select *
from table1 t1
left join table2 t2
on t1.myid = t2.myid and t2.somefield = 'something'
Так первый я бы беспокоился, что мой запрос был неправильным, чтобы начать с, то я бы беспокоиться о представление. Внутреннее соединение - это NOT повышение производительности для Left Join, они означают две разные вещи и должны возвращать разные результаты, если у вас нет таблицы, где всегда будет соответствие для каждой записи. В этом случае вы переходите на внутреннее соединение, потому что другое неверно, чтобы не повысить производительность.
Мое лучшее предположение о том, что левое объединение занимает больше времени, состоит в том, что оно соединяется со многими другими строками, которые затем отфильтровываются по предложению where. Но это просто дикая догадка. Чтобы знать, что вам нужно посмотреть планы исполнения.
В целом я согласен, но, честно говоря, я построил запросы с помощью 'LEFT OUTER JOIN', хотя сегодня данные могут легко поместиться в' INNER JOIN' - результаты сегодня не обязательно будут результатом, который всегда будет, и могут появляться несогласованные строки, введенные позже (или которые были там в прошлом). Поэтому я не хочу слишком громко звучать будильники, если сегодня и внутренние, и внешние соединения будут давать те же результаты. Тот факт, что планы исполнения разные, заставляет меня поверить, что между двумя запросами больше различий, чем просто ключевые слова соединения. –
- 1. следующий linq, выполняющий левое внешнее соединение вместо внутреннего соединения
- 2. Внешнее левое соединение внутреннего соединения и регулярного стола
- 3. Как использовать левое соединение вместо внутреннего соединения
- 4. NHibernate, левое внешнее соединение
- 5. Linq к SQL - левое внешнее соединение
- 6. LINQ к SQL - левое внешнее соединение с несколькими условиями соединения
- 7. linq to sql внешнее левое соединение с несколькими условиями соединения
- 8. Левое внешнее соединение и правое внешнее соединение
- 9. Внешнее соединение, обеспечивающее результаты внутреннего соединения
- 10. Oracle левое внешнее соединение
- 11. MySQL левое внешнее соединение
- 12. Левое внешнее соединение в SQL Server 2012 LocalDB не работает?
- 13. Невозможно использовать левое внешнее соединение и использование в SQL Server
- 14. SQL Server: левое внешнее соединение на том, существует ли ID
- 15. Джанго 1,7 левое внешнее соединение
- 16. SQL Условие не подхвачено - левое внешнее соединение
- 17. Левое внешнее соединение sql не работает
- 18. Linq к SQL левое внешнее соединение не
- 19. левое внешнее соединение сумма сервер SQL дублировать
- 20. SQL левое внешнее соединение по нескольким столбцам
- 21. Левое внешнее соединение (соединение между тремя таблицами)?
- 22. левое внешнее соединение с Entity Framework Ядра
- 23. Левое внешнее соединение сгенерированным столом?
- 24. Левое внешнее соединение или инструкция?
- 25. Левое внешнее соединение в рельсах
- 26. левое внешнее соединение с подзапроса
- 27. левое внешнее соединение в LINQ
- 28. Левое внешнее соединение в доступе?
- 29. Левое внешнее соединение в MySQL
- 30. левое внешнее соединение в LINQ
Вы сравнили планы выполнения? Если вы зададите неопределенный вопрос, я надеюсь, вы не ожидаете очень конкретных результатов. –
Первое, что вам нужно сделать, если вы ожидаете результатов, - убедиться, что статистика (и индексы) обновлена. –
@ Аарон Бертран Да, извините, не могу сообщить подробности. Планы исполнения выглядят по-другому, но я их не хорошо читаю. Во всяком случае, я просто подумал, может быть, есть общие причины для этого ... – ren