我在Linq to SQL中发现了一个巨大的性能问题.
使用字符串从表中进行选择时,传递给sql server的参数始终为nvarchar,即使sql表是varchar也是如此.这导致表扫描而不是搜索,这是一个巨大的性能问题.
var q = (
from a in tbl
where a.index == "TEST"
select a)
var qa = q.ToArray();
Run Code Online (Sandbox Code Playgroud)
该参数作为nvarchar传递,这导致整个索引在使用之前从varchar转换为nvarchar.
如果参数是varchar,那么它是一个非常快速的搜索.
有没有办法覆盖或改变这个?
谢谢关心克雷格.
以下简单查询需要很长时间(几分钟)才能执行.
我有一个索引:
create index IX on [fctWMAUA] (SourceSystemKey, AsAtDateKey)
Run Code Online (Sandbox Code Playgroud)
SELECT MAX([t0].[AsAtDateKey]) AS [Date], [t0].[SourceSystemKey] AS [SourceSystem]
FROM [fctWMAUA] (NOLOCK) AS [t0]
WHERE SourceSystemKey in (1,2,3,4,5,6,7,8,9)
GROUP BY [t0].[SourceSystemKey]
Run Code Online (Sandbox Code Playgroud)
统计数据如下:
采用完全相同的查询并重新格式化如下给我这些统计信息:
执行需要31毫秒.
SELECT MAX([t0].[AsAtDateKey]) AS [Date], [t0].[SourceSystemKey] AS [SourceSystem]
FROM [fctWMAUA] (NOLOCK) AS [t0]
WHERE SourceSystemKey = 1
GROUP BY [t0].[SourceSystemKey]
UNION
SELECT MAX([t0].[AsAtDateKey]) AS [Date], [t0].[SourceSystemKey] AS [SourceSystem]
FROM [fctWMAUA] (NOLOCK) AS [t0]
WHERE SourceSystemKey = 2
GROUP BY [t0].[SourceSystemKey]
UNION
SELECT MAX([t0].[AsAtDateKey]) AS …Run Code Online (Sandbox Code Playgroud)