Nhibernate查询比SSMS查询慢得多

本文关键字:查询 SSMS Nhibernate | 更新日期: 2023-09-27 17:50:14

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

当我运行相同的查询(一个简单的选择与WHERE Campaign = 500)在SQL Server管理工作室,这个查询需要1秒。

当我声明@p0 int &设置@p0 = 500,然后使用WHERE Campaign = @p0,查询也需要1分钟…

是否有一种方法,使nHibernate"翻译"的@p0成500之前,它得到执行在我的数据库?

Nhibernate查询比SSMS查询慢得多

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

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