Подтвердить что ты не робот

Внутреннее соединение подзапроса v/s в сервере sql

У меня следующие запросы

Сначала, используя внутреннее соединение

SELECT item_ID,item_Code,item_Name 
FROM [Pharmacy].[tblitemHdr] I 
    INNER JOIN  EMR.tblFavourites F ON I.item_ID=F.itemID
WHERE F.doctorID = @doctorId AND F.favType = 'I'

второй с использованием вспомогательного запроса, например

SELECT item_ID,item_Code,item_Name from [Pharmacy].[tblitemHdr]
WHERE item_ID IN
(SELECT itemID FROM EMR.tblFavourites
WHERE doctorID = @doctorId AND favType = 'I'
)

В этой таблице элементов [Pharmacy].[tblitemHdr] Содержит 15 столбцов и 2000 записей. И [Pharmacy].[tblitemHdr] содержит 5 столбцов и около 100 записей. в этом сценарии which query gives me better performance?

4b9b3361

Ответ 1

Обычно объединения будут работать быстрее, чем внутренние запросы, но на самом деле это будет зависеть от плана выполнения, созданного SQL Server. Независимо от того, как вы пишете свой запрос, SQL Server всегда будет преобразовывать его в план выполнения. Если это "умный" достаточно, чтобы сгенерировать один и тот же план из обоих запросов, вы получите тот же результат.

Здесь и здесь некоторые ссылки, чтобы помочь.

Ответ 2

В Sql Server Management Studio вы можете включить " Статистика клиента", а также Включить фактический план выполнения. Это даст вам возможность точно знать время выполнения и нагрузку каждого запроса.

Также между каждым запросом очищается кеш, чтобы избежать влияния кеша на производительность

USE <YOURDATABASENAME>;
GO
CHECKPOINT;
GO
DBCC DROPCLEANBUFFERS;
GO

Я думаю, что всегда лучше видеть своими глазами, чем полагаться на теорию!

Ответ 3

соединение быстрее, чем подзапрос.

Подзапрос делает доступ для занятого доступа к диску, думает о записи жесткого диска для чтения и записи (head?), которая идет туда и обратно, когда он обращается к пользователю: Search, Expression, PageSize, DrilldownPageSize, User, SearchExpression, PageSize, DrilldownPageSize, User.. и т.д.

join работает, концентрируя операцию по результатам первых двух таблиц, любые последующие объединения будут концентрироваться на соединении с результатом в первой ячейке (или с кэшем на диск) и так далее. меньше движения иглы чтения-записи, тем быстрее

Источник: Здесь

Ответ 4

Подзапрос против присоединения

Таблица 1 20 строк, 2 столбца

Таблица два 20 строк, 2 столбца

подзапрос 20 * 20

присоединиться 20 * 2

логично, исправить

Подробное

enter image description here

enter image description here

Счетчик сканирования указывает на эффект умножения, так как системе придется проходить снова и снова для извлечения данных, для вашего показателя производительности, просто посмотрите на время

Ответ 5

Первый запрос лучше второго запроса.. потому что первый запрос мы соединяем обе таблицы. а также проверить план объяснения для обоих запросов...

Ответ 6

Все зависит от данных и реляционного отображения между таблицами. Если правила СУБД не соблюдаются, то даже первый запрос будет медленным при выполнении и получении данных.