小编Cra*_*aig的帖子

Linq to SQL nvarchar问题

我在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,那么它是一个非常快速的搜索.

有没有办法覆盖或改变这个?

谢谢关心克雷格.

sql linq indexing nvarchar linq-to-sql

9
推荐指数
1
解决办法
4893
查看次数

如何在Sql Server中构造group by的索引

以下简单查询需要很长时间(几分钟)才能执行.

我有一个索引:

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)

统计数据如下:

  • 逻辑读取1827978
  • 物理读取1113
  • 预读1806459

采用完全相同的查询并重新格式化如下给我这些统计信息:

  • 逻辑读数36
  • 物理读数0
  • 预读0

执行需要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)

sql sql-server indexing group-by

7
推荐指数
1
解决办法
2万
查看次数

标签 统计

indexing ×2

sql ×2

group-by ×1

linq ×1

linq-to-sql ×1

nvarchar ×1

sql-server ×1