2

我正在查询一个实体数据模型(.NET 4.0),并且在本地运行与从我们的开发服务器运行时得到截然不同的结果。本地查询需要 10 秒,但在开发服务器上需要 7 分钟。两种环境都访问相同的 SQL 2005 数据库(即完全相同的连接字符串)。

我查看了生成的底层 SQL,发现这对于两种环境来说是不同的。由开发服务器上的代码生成的查询有一些额外的子查询导致速度急剧下降。那么,什么会导致每个环境的 SQL 代码生成器为应该是相同的查询产生不同的结果呢?

更新 - (删除旧样本,因为它具有误导性)

我找到了缓慢的原因,但我仍然不明白为什么针对同一个数据库运行的相同代码库会产生两个不同的 SQL 查询。

发生的情况是,当我在本地运行代码时,我的查询中的所有常量字符串都作为普通字符串放在 SQL 查询字符串中。当我在服务器上运行相同的代码时,生成的 SQL 将我的字符串转换为 Unicode 字符串:

本地生成:

WHERE ('DENY' <> [Extent1].[status])

在服务器上生成:

WHERE ( N'DENY' <> [Extent1].[status] )

在字符串上添加和删除 Unicode 的“N”符号会极大地改变执行时间。所以现在我知道为什么查询很慢,但我仍然不知道为什么服务器上的 SQL 代码生成器使这些字符串成为 Unicode,但在本地运行时却不是。我检查了实体数据模型,“状态”列的 Unicode 属性设置为 False,所以我不知道为什么查询会转换为 Unicode。

4

0 回答 0