我有一个使用 ODBC 访问 SQL Server 2012 数据库的应用程序,SQLSetStmtAttr用于将SQL_SOPT_SS_CURSOR_OPTIONS选项设置为SQL_CO_FFO. 这意味着它从数据库中读取的内容由快速只进游标支持。
这在大多数情况下是可以的,但是有时快速只进游标的性能明显低于“通常”静态游标(我们将使用 default 获得的游标SQL_CO_OFF)。
问题:有没有办法强制 SQL Server 不使用快进游标?
显然,正确的方法是更改应用程序,并且该过程正在进行中,但这需要时间,同时我正在寻找临时解决方法。
到目前为止,我唯一的想法是使用它:(来自Fast Forward-only Cursors)
Fast Forward-only 游标的隐式转换
在以下情况下,仅快进游标会隐式转换为其他游标类型:
- 如果 SELECT 语句将一个或多个表与触发器表(INSERTED/DELETED)连接起来,则游标将转换为静态游标
但是,即使是临时解决方法,这似乎也有点难看。可能有更好的方法吗?
旁注:在这种情况下,仅快速向前游标表现不佳的主要原因是它们不支持并行性。
对于非快进sys.dm_exec_cursors给我:
API | 快照 | 只读 | 全球 (0)
而快进选项是:
API | 快进| 只读 | 全球 (0)
快照选项比快进选项快 5 倍。如果我查看它们的查询计划,除了DegreeOfParallelism之外,它们没有太大不同。快照是 16 而快进是 0。问题是我们正在从视图中读取(我们没有太多控制权),而这些视图在其设计中是次优的。