0
我正在嘗試改進一個簡單查詢的性能,該查詢返回nvarchar(64)列FromNumber
或列ToNumber
以給定前綴(在這種情況下爲'1002')。當使用LIKE'前綴%'篩選兩個nvarchar列時,SQL改進了count(*)
這是當前的SQL查詢(由實體框架所產生):
exec sp_executesql N'SELECT
[GroupBy1].[A1] AS [C1]
FROM (SELECT
COUNT_BIG(1) AS [A1]
FROM [dbo].[SMDR_Call] AS [Extent1]
WHERE ([Extent1].[FromNumber] LIKE @p__linq__0 ESCAPE N''~'')
OR ([Extent1].[ToNumber] LIKE @p__linq__1 ESCAPE N''~'')
) AS [GroupBy1]',
N'@p__linq__0 nvarchar(4000),@p__linq__1 nvarchar(4000)',
@p__linq__0=N'1002%',@p__linq__1=N'1002%'
FWIW,所述FromNumber
和ToNumber
列(持久)計算列。他們有指標:
CREATE NONCLUSTERED INDEX IX_Call_FromNumber ON dbo.Call (FromNumber)
WITH(STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
的時候,我得到這個查詢是〜800毫秒,2萬條記錄的表。
任何建議使這個更快?
我剛試過。性能差異很小,可歸因於實驗誤差。有*是* perf的好處,但是,運行只是SQL查詢,而不是運行參數化的SP(不知道爲什麼) –
很高興你發現了一個加速:-) – buffjape