Как оптимизировать SQL-запрос, потребляющий много ресурсов ЦП

Я использую платформу LINQ и MVC6 и размещаюсь в облаке Microsoft Azure. Следующий запрос потребляет много ресурсов ЦП. Вот запрос в формате SQL

(@p__linq__0 nvarchar(4000))SELECT 
[GroupBy1].[A1] AS [C1]
FROM ( SELECT 
    COUNT(1) AS [A1]
    FROM [dbo].[DevNews] AS [Extent1]
    WHERE (1 = [Extent1].[AdminCheck]) AND ([Extent1].[Tags] LIKE @p__linq__0 ESCAPE N'~') AND ([Extent1].[NewsLabels] IS NULL) AND ([Extent1].[Source] IN (N'PTI',N'IANS',N'Reuters'))
)  AS [GroupBy1]

Какие-нибудь индексы? Фактический план выполнения?

Ivan Starostin 06.10.2018 13:29
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
1
126
3

Ответы 3

просто предложение ... глядя на свой образец, вы можете избежать подзапроса и unuseful () вокруг каждого условия where

 SELECT COUNT(1) AS [C1]
    FROM [dbo].[DevNews] AS [Extent1]
    WHERE 1 = [Extent1].[AdminCheck] 
    AND [Extent1].[Tags] LIKE @p__linq__0 ESCAPE N'~' 
    AND [Extent1].[NewsLabels] IS NULL
    AND [Extent1].[Source] IN (N'PTI',N'IANS',N'Reuters')

это должно избежать создания временной таблицы, связанной с подзапросом

. . SQL Server не материализует подзапросы (как правило), поэтому переписывание запроса не влияет на производительность.

Gordon Linoff 06.10.2018 13:37

Вы запрашиваете по существу:

SELECT COUNT(1) AS [C1]
FROM [dbo].[DevNews] AS [Extent1]
WHERE 1 = [Extent1].[AdminCheck] AND 
     [Extent1].[Tags] LIKE @p__linq__0 ESCAPE N'~' AND
     [Extent1].[NewsLabels] IS NULL AND
     [Extent1].[Source] IN (N'PTI', N'IANS', N'Reuters')

Удаление подзапроса не должно повлиять на производительность SQL Server. Однако индекс будет. Я бы порекомендовал покрывающий индекс со следующими столбцами: (AdminCheck, NewsLabels, Source, Tags).

Вы должны быть уверены, что Source хранится как NCHAR или NVARChAR. Преобразование типов может замедлить выполнение запроса.

Наконец, подозрительна колонка под названием Tags. Если это список тегов, хранящихся в виде строки, вам следует пересмотреть структуру данных. Это не лучший способ хранить списки в SQL.

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

Другие вопросы по теме