Nhibernate查询比SSMS查询慢

时间:2015-05-21 15:44:45

标签: c# sql sql-server linq nhibernate

在linq中执行查询时,我的nhibernate调试日志显示它使用参数@ p0来表示生成的SQL中WHERE子句中的值。 这大约需要1分钟。

当我在SQL Server Management Studio中运行相同的查询(使用WHERE Campaign = 500的简单选择)时,此查询需要1秒钟。

当我宣读@ p0 int& SET @ p0 = 500,然后使用WHERE Campaign = @ p0,查询也需要1分钟......

有没有办法让nHibernate在我的数据库执行之前将@ p0“翻译”为500?

1 个答案:

答案 0 :(得分:1)

据我所知 - NHibernate将使用参数化查询,这通常是一件好事。困难在于,数据库引擎偶尔会生成一个查询执行计划,该计划对@ p0的某些可能值有利,对其他可能值有害。

我建议您检查索引,统计信息并查看缓存查询计划的问题。根据具体情况,确切的解决方案可能会有所不同。也许某些索引只能在事先知道该值时使用(然后可以改变索引以使其更通用)。或者你可能只需要重建它们?还有一些方法可以让SQL服务器不使用缓存的查询计划 - 然后将使用已知参数值重新计算每次执行。