ПРОСМОТРА с SELECT внутри условий, задерживающих запрос - PullRequest
0 голосов
/ 18 февраля 2020

В одном из моих SQL представлений я использую встроенный оператор выбора с предложением where.

Контур моего представления выглядит как

ALTER VIEW [dbo].[vw_autumn]
AS
    SELECT 
        BookNumber, Title, shopNo
    FROM 
        (SELECT 
             BookNumber, Title, shopNO
         FROM  
             (SELECT DISTINCT 
                  (sum_vnr) AS BookNumber,
                  navn1 AS Title,
                  tik AS ShopNO,
                  ROW_NUMBER() OVER (PARTITION BY sum_vnr, tik ORDER BY sum_vnr DESC) AS rownumber
              FROM  
                  sum s
              INNER JOIN 
                  hod h ON s.tik = h.tik
              WHERE 
                  s.aar = (SELECT currentyear
                           FROM SemesterInfo
                           WHERE SemName = 'Autumn')
                  AND CAST(s.sum_vnr AS BIGINT) > 10000
                  AND (s.id LIKE 'h%' OR s.id LIKE 'H%' OR s.id LIKE 'j%'
                       OR s.id LIKE 'J%')) a
    WHERE rownumber = 1
    ) b
LEFT JOIN (
    ------
    ) p ON b.ShopNO = p.tikk
    AND b.ISBN = p.vnr
LEFT JOIN table_k k ON p.aar = k.aar

GO

И если я удаляю WHERE предложение

 WHERE 
     s.aar = (SELECT currentyear
              FROM SemesterInfo
              WHERE SemName = 'Autumn')

и сокращение его до

WHERE s.aar =19 

Я получаю результат просмотра очень быстро. Но я пытаюсь добавить к этому запросу некоторую динамическую c природу и выбираю эту константу из таблицы настроек

Есть мысли по этому поводу? Почему для загрузки запроса требуется неопределенное время со встроенным предложением Where?

Ответы [ 2 ]

0 голосов
/ 18 февраля 2020

Перепишите подзапрос как объединение.

INNER JOIN SemesterInfo si
ON s.aer = si.currentYear
WHERE si.SemName = 'Autumn'

Если этого не произойдет, попробуйте сохранить этот синтаксис и создать индекс для SemName

0 голосов
/ 18 февраля 2020

: попробуйте с IN insted =

 WHERE 
     s.aar in (SELECT currentyear
              FROM SemesterInfo
              WHERE SemName = 'Autumn')
...