SQL Anywhere 查询优化程序可以从集合差异 SQL 运算符 EXCEPT 的以下两个物理实现中进行选取:基于排序的变体 MergeExcept (EM) 和基于散列的变体 HashExcept (EH)。
MergeExcept 使用 MergeJoin 通过按排序顺序分析匹配行来计算两个输入之间的集合差异。通常,要求对两个输入进行显式排序。同样,HashExcept 使用 HashAntisemijoin 来计算两个输入之间的集合差异,使用左外散列连接来计算两个输入之间的差异 (EXCEPT ALL)。
当检测到内存不足时,HashExcept 可以动态地切换到嵌套循环策略。如果发生这种情况,性能计数器将递增。可以使用 QueryLowMemoryStrategy 数据库属性或连接属性读取此监控器,也可以在图形式计划中的 QueryLowMemoryStrategy 统计信息中(如果运行时有统计信息)或者在 Windows 性能监控器的 [查询:内存不足策略] 计数器中读取此监控器。
当内存不足时,将在 Windows Mobile 上禁用 HashExcept。
将 EXCEPT,MergeExcept 和 HashExcept 与 DISTINCT 算法中的一个结合使用,可确保结果中不包含重复项。对于 EXCEPT ALL,HashExceptAll 和 MergeExceptAll 与 RowReplicate 结合使用,RowReplicate 用于计算结果中包含的重复行的正确数目。
![]() |
使用DocCommentXchange 讨论此页。
|
版权 © 2010, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.0 |