具有休眠状态的MSSQL Server执行的查询与来自SQL控制台的查询不同

时间:2019-06-22 13:42:35

标签: sql-server hibernate optimization

如果有一个查询从视图中选择前50行:

select * from device_overview order by device_id asc offset 0 rows fetch next 50 rows only

如果我使用sql profiler,我可以看到它已翻译为

declare @p1 int
set @p1=180150031
declare @p2 int
set @p2=50
exec sp_cursoropen @p1 output,N'select * from device_overview

order by device_id asc offset 0 rows fetch next 50 rows only',8,8193,@p2 output
select @p1, @p2

我从运行为ORM的Spring Boot应用程序中运行相同的查询时,查询转换为

exec sp_executesql N'select deviceover0_.id as id1_8_, 
/*...all other fields ommitted..*/
 from dbo.device_overview deviceover0_ 
 order by deviceover0_.device_id asc offset 0 rows fetch next @P1 rows only  ,@P1 int,50

后者消耗的CPU功率要大得多,并且在Azure SQL上运行时达到了我们计划的DTU限制。

是否有一种方法可以告诉hibernate以与上述相同的方式使用游标而不是简单地执行语句来生成查询?我尝试在数据源网址中使用; selectMethod = cursor,但对此没有任何影响。

0 个答案:

没有答案