嗨,大家好,我正面臨性能問題。
當我運行此查詢與日期時間內查詢linq查詢優化日期時間
var temp = (from p in db.BEM_EVT_FULL
where (p.date_reception > new DateTime(2015,01,01))
group p by p.mc_object into g
orderby g.Count() descending
select new StringIntType
{
str = g.Key,
nbr = g.Count()}).Take(50).ToList();
SQL Server Profiler中宣佈它翻譯成該查詢
SELECT TOP (50)
[Project1].[C3] AS [C1],
[Project1].[mc_object] AS [mc_object],
[Project1].[C2] AS [C2]
FROM (SELECT
[GroupBy1].[A1] AS [C1],
[GroupBy1].[A2] AS [C2],
[GroupBy1].[K1] AS [mc_object],
1 AS [C3]
FROM (SELECT
[Extent1].[mc_object] AS [K1],
COUNT(1) AS [A1],
COUNT(1) AS [A2]
FROM [dbo].[BEM_EVT_FULL] AS [Extent1]
WHERE [Extent1].[date_reception] > convert(datetime2, '2015-01-01 00:00:00.0000000', 121)
GROUP BY [Extent1].[mc_object]
) AS [GroupBy1]
) AS [Project1]
ORDER BY [Project1].[C1] DESC
,它工作得很好那你現在就當1S
下執行我宣佈DateTime外部查詢和我運行此查詢
DateTime dt = new DateTime(2015,01,01);
var temp = (from p in db.BEM_EVT_FULL
where (p.date_reception > dt)
group p by p.mc_object into g
orderby g.Count() descending
select new StringIntType
{
str = g.Key,
nbr = g.Count()
}).Take(50).ToList();
SQL Server Profiler中它翻譯成該查詢
exec sp_executesql N'SELECT TOP (50)
[Project1].[C3] AS [C1],
[Project1].[mc_object] AS [mc_object],
[Project1].[C2] AS [C2]
FROM (SELECT
[GroupBy1].[A1] AS [C1],
[GroupBy1].[A2] AS [C2],
[GroupBy1].[K1] AS [mc_object],
1 AS [C3]
FROM (SELECT
[Extent1].[mc_object] AS [K1],
COUNT(1) AS [A1],
COUNT(1) AS [A2]
FROM [dbo].[BEM_EVT_FULL] AS [Extent1]
WHERE [Extent1].[date_reception] > @p__linq__0
GROUP BY [Extent1].[mc_object]
) AS [GroupBy1]
) AS [Project1]
ORDER BY [Project1].[C1] DESC',N'@p__linq__0 datetime2(7)',@p__linq__0='2015-01-01 00:00:00'
這需要大約5MN得到exectued,所有的差異,因爲日期時間報關的,我需要知道我應該作出什麼樣的變化申報日期時間outisde查詢,獲得與第一個查詢相同的性能。
任何線索從http://stackoverflow.com/questions/3710523/sql-server-sp-executesql-and-execution-plans? – tschmit007
數據庫中是否有'[date_reception]'的索引?那麼'[mc_object]'呢? –
是的,我有兩個索引 –