Как оптимизировать SQL-запрос, потребляющий большие ресурсы процессора - PullRequest
0 голосов
/ 06 октября 2018

Я использую платформу 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]

Ответы [ 3 ]

0 голосов
/ 06 октября 2018

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

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.

0 голосов
/ 07 октября 2018

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

0 голосов
/ 06 октября 2018

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

 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')

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...