使用Equal的Linq查询非常慢,但不包含

时间:2014-04-17 10:14:39

标签: c# sql linq nhibernate

我使用linq时遇到问题: 查询使用" ="很慢,我用这种方式创建它:

predicate = predicate.And(p => p.Fields.Any(f => f.Name == name && f.ExpectedValue == value));

但是,"相同"查询使用"包含"很快:

predicate = predicate.And(p => p.Fields.Any(f => f.Name == name && f.ExpectedValue.Contains(value)));

在我的桌子上,我有#34;姓名"并且在" ExpectedValue"。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

如果您的列是VARCHAR,那么您需要告诉NHibernate将其映射为AnsiString,否则它将发送您作为NVARCHAR查询的参数,然后SQL服务器将决定它必须转换每个VARCHAR值到NVARCHAR进行比较。

因为SQL服务器必须将表中的每个VARCHAR字段转换为NVARCHAR,所以它不会使用索引,这可能会导致严重的查询减速,无明显原因。