Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.
敏感游标可以用于只读或可更新的游标类型。
这些游标具有敏感的成员资格、顺序和值。
敏感游标对应于敏感游标的 ISO/ANSI 标准定义,并对应于 ODBC 动态游标。
敏感游标禁用预取。通过游标可看到所有更改,包括通过游标以及从其它事务做出的更改。如果隔离级别较高,则可能会因锁定而隐藏一些在其它事务中做出的更改。
对游标成员资格、顺序以及所有列值的更改都是可见的。例如,如果敏感游标包含连接,而且,修改了某个基础表的某个值,那么,由该基行组成的所有结果行都会显示新值。结果集成员资格和顺序可能会在每一次读取时更改。
敏感游标会始终返回与查询的选择标准匹配的行,返回顺序为任何 ORDER BY 子句指定的顺序。更新可能会影响结果集的成员资格、顺序和值。
敏感游标的要求会对敏感游标的实现施加限制:
行不能被预取,因为对预取的行进行的更改通过游标将不可见。这可能会影响性能。
敏感游标必须在没有构建任何工作表的情况下实现,这是因为如果行存储为工作表,则无法通过游标看到对这些行的更改。
由于存在着不能有工作表这样的限制,所以优化器选择连接方法时也会受到限制,因而性能也可能会受到影响。
对于某些查询,优化器不能构建不包括工作表并会使游标敏感的计划。
工作表通常用于对中间结果进行排序和分组。如果行可以通过索引进行访问,那么排序就不需要工作表。虽然无法准确说明都有哪些查询会使用工作表,但以下查询肯定要使用工作表:
UNION 查询,虽然 UNION ALL 查询不一定使用工作表。
带有 ORDER BY 子句的语句,如果在 ORDER BY 列上没有索引。
任何使用散列连接优化的查询。
许多涉及 DISTINCT 或 GROUP BY 子句的查询。
在这些情况下,SQL Anywhere 或者会向应用程序返回错误,或者会将游标类型更改为敏感性未定型游标并返回警告。
有关查询优化和工作表使用的详细信息,请参见查询优化与执行。