我正在使用 EF Core 在大型 SQL Server 数据库上运行参数化“SELECT”查询。 当从 SQL Server Management Studio (SSMS) 运行完全相同的查询(具有相同的参数值)时,我观察到性能结果非常不均匀。
在最极端的情况下(取决于参数的值),从 SSMS 执行时性能提高了 2000 个数量级。 例如,从 SSMS 执行查询可能需要 10 毫秒,从 EF Core 执行则需要 20 秒。
我的猜测是 SQL Server 在这两种情况下没有使用相同的查询计划。
根据 @Sergey 和 @RossBush 的非常有价值的评论,我已经能够找到该行为的原因:
使用
dbcc freesystemcache('MyDbName')
清除缓存并使用相同的参数值从两侧运行查询后,我现在拥有完全相同的执行时间。
这个问题得到解决,我已经能够调整索引以提高整体性能。