Що швидше LEFT JOIN або підзапит у SELECT, Скахін Олексій
Особистий блог. Нотатки про програмування і не тільки
Що швидше LEFT JOIN або підзапит у SELECT
Часто потрібно вибрати додаткові параметри плюс до основної вибірки. Це можна зробити двома способами:
- LEFT JOIN до основного запиту
- Підзапит у секції SELECT
Підзапит у секції SELECT:Варіант з LEFT JOIN:Після розбору плану виконання запиту в MS SQL Server, було виявлено:
- Під час вибірки в секції SELECT потрібен додатковий час на злиття основної вибірки та підзапиту. Вийшло 1% від загального часу. (+ LEFT JOIN/ - SELECT)
- Виявилось, що кожен LEFT JOIN виконується окремим потоком! У той час, як підзапити виконуються послідовно після основної вибірки. (+ LEFT JOIN/ - SELECT)
- Кожен LEFT JOIN поєднується в результуючу вибірку, що потребує додаткової пам'яті. Тоді як подзапрос поверне нам одне значення кожний рядок, тобто. Для отримання результату нам потрібно менше пам'яті. (- LEFT JOIN /+ SELECT)
Обмеження у підзапитах:При вибірці додаткових параметрів у секції SELECT ми можемо зіткнутися із ситуацією, коли підзапит повернув нам більше одного запису. Відсікти це можна, вказавши примусово число записів, що вибираються: Такий запит виконувався довше на96%порівняно з аналогічним без TOP 1
Наприкінціхотів би сказати, що бувають ситуації коли без підзапитів не обійтися (угруповання, сортування тощо), але використовувати їх потрібно обґрунтовано, якщо єможливість, то краще скористатися LEFT JOIN.