У меня есть запрос с использованием STRING_SPLIT для INNER JOIN, и он выглядит по-разному в зависимости от того, как я присоединяюсь.
ПРИМЕР 1 (11 секунд - 161K строк)
DECLARE @SucursalFisicaIDs AS TABLE (value int)
INSERT INTO @SucursalFisicaIDs
SELECT value FROM STRING_SPLIT('16531,16532,16533,16534,16536,16537,16538,16539,16541,16543,16591,16620,17071',',')
SELECT ArticuloID, SUM(Existencias) AS Existencias
FROM ArticulosExistenciasSucursales_VIEW WITH (NOEXPAND)
INNER JOIN @SucursalFisicaIDs AS SucursalFisicaIDs ON SucursalFisicaIDs.value = ArticulosExistenciasSucursales_VIEW.SucursalFisicaID
GROUP BY ArticuloID
![enter image description here](https://i.stack.imgur.com/pkJ9D.png)
EXAMPLE 2 (2 seconds - 161K rows)
SELECT ArticuloID, SUM(Existencias) AS Existencias
FROM ArticulosExistenciasSucursales_VIEW WITH (NOEXPAND)
WHERE SucursalFisicaID NOT IN (16531,16532,16533,16534,16536,16537,16538,16539,16541,16543,16591,16620,17071)
GROUP BY ArticuloID
![enter image description here](https://i.stack.imgur.com/Ev8NJ.png)
Both Queries read from the view (it is indexed).
EXAMPLE 3 (3 seconds - 161K rows)
SELECT ArticuloID, SUM(Existencias) AS Existencias
FROM ArticulosExistenciasSucursales_VIEW WITH (NOEXPAND)
INNER JOIN STRING_SPLIT('16531,16532,16533,16534,16536,16537,16538,16539,16541,16543,16591,16620,17071',',') AS SucursalFisicaIDs ON SucursalFisicaIDs.value = ArticulosExistenciasSucursales_VIEW.SucursalFisicaID
GROUP BY ArticuloID
![enter image description here](https://i.stack.imgur.com/MV3FN.png)
EXAMPLE 4 (6 seconds - 161K rows)
DECLARE @SucursalFisicaIDs AS TABLE (value int)
INSERT INTO @SucursalFisicaIDs
SELECT value FROM STRING_SPLIT('16531,16532,16533,16534,16536,16537,16538,16539,16541,16543,16591,16620,17071',',')
SELECT ArticuloID, SUM(Existencias) AS Existencias
FROM ArticulosExistenciasSucursales_VIEW WITH (NOEXPAND)
WHERE SucursalFisicaID NOT IN (Select Value From @SucursalFisicaIDs)
GROUP BY ArticuloID
введите описание изображения здесь
Кто-нибудь может мне сказать, почему не работает первый пример? Он должен быть таким же и лучше других. Что-нибудь о типах, которые я должен сделать? Обратите внимание, что в примере 4 таблица просматривает SucursalFisicaIDs Table, количество строк. (3M ???)
С уважением