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