У меня есть этот запрос ниже, он получает более 6000 строк с сервера, загруженные данные только 317 КБ, но это занимает почти 25 секунд или время ожидания сервера IIS.
-- Region Parameters
DECLARE @p0 Int = 0
DECLARE @p1 NVarChar(1000) = 'sample.user'
DECLARE @p2 Int = 0
DECLARE @p3 NVarChar(1000) = 'sample.user'
-- EndRegion
SELECT [t0].[Id], [t0].[DocNumber], [t0].[DocStatus], [t0].[Title], [t0].[SubmittedDate], [t0].[CreatedBy], [t0].[ApprovedByStep], [t0].[RoutedFor],
(CASE
WHEN [t2].[test] IS NULL THEN NULL
ELSE [t2].[ApprovedBy]
END) AS [HistApprovedBy]
FROM [TESTDB].[dbo].[SampleTable] AS [t0]
LEFT OUTER JOIN (
SELECT 1 AS [test], [t1].[RequestId], [t1].[DocType], [t1].[ApprovedBy]
FROM [TESTDB].[dbo].[SampleHistories] AS [t1]
) AS [t2] ON ([t0].[Id] = [t2].[RequestId]) AND (@p0 = [t2].[DocType])
WHERE ([t0].[CreatedBy] = @p1) OR (([t0].[DocStatus] <> @p2) AND ([t0].[CreatedBy] <> @p3))
ORDER BY [t0].[DocNumber]
Я прочитал, что индексирование может ускорить поиск данных, как мне создать индекс SQL-запроса выше? и если у вас есть предложения о том, как ускорить его. Буду признателен.
Нажмите здесь для плана действий
Для справки. Вот мой LINQ
var vm = (from splTbl in SampleTable
join splsplHist in SamplesplHistories on
new
{
Key1 = splTbl.Id,
Key2 = 0
}
equals
new
{
Key1 = splHist.RequestId,
Key2 = splHist.DocType
}
into subsplHists
from subsplHist in subsplHists.DefaultIfEmpty()
where (splTbl.CreatedBy == "sample.user")
|| (splTbl.DocStatus != 0 && splTbl.CreatedBy != "sample.user")
orderby splTbl.DocNumber
select new
{
splTbl.Id,
splTbl.DocNumber,
splTbl.DocStatus,
splTbl.Title,
splTbl.SubmittedDate,
splTbl.CreatedBy,
splTbl.ApprovedByStep,
splTbl.RoutedFor,
splHistApprovedBy = (subsplHist == null ? null : subsplHist.ApprovedBy)
}
).ToList()
.GroupBy(x => new {
x.Id,
x.DocNumber,
x.DocStatus,
x.Title,
x.SubmittedDate,
x.CreatedBy,
x.ApprovedByStep,
x.RoutedFor
}).Select(x => new
{
x.Key.Id,
x.Key.DocNumber,
x.Key.DocStatus,
x.Key.Title,
x.Key.SubmittedDate,
x.Key.CreatedBy,
x.Key.ApprovedByStep,
x.Key.RoutedFor,
splHistApprovedBy = string.Join(",", x.Where(i => i.splHistApprovedBy != null).Select(i => i.splHistApprovedBy).Distinct())
}).ToList();