HashGroupBy 建立每组包含一行的内存中的散列表。当读取输入行时,将在工作表中查找关联组。它会更新集合函数并将组行重写到工作表中。如果没有找到组记录,则将初始化新的组记录并将其插入到工作表中。
HashGroupBy 可在返回第一行之前计算其所有结果行,并且可用于满足完全敏感的游标或对值敏感的游标。必须完全实现散列分组依据的结果后,才能从查询返回。如果必要,优化程序将为执行计划添加一个工作表以确保实现此目标。
可以按并行方式执行 HashGroupBy。
如果组能够装入内存,HashGroupBy 就会非常顺利地执行,与输入的大小无关。如果内存无法容纳散列表,将把输入分为多个较小的工作表,并以递归的方式对这些表进行分区,直到能够装入内存为止。如果优化程序检测到在查询执行过程中可能会出现内存不足的情况,它将避免使用 HashGroupBy 生成访问计划。如果没有足够的内存来保存分区,则优化程序就会放弃 HashGroupBy 的中间结果,而改用内部内存不足策略。
HashGroupBy 运算符可以使用的内存量取决于服务器的进程并发水平和活动连接数。请参见SQL Anywhere 中的线程和设置数据库服务器的进程并发水平。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |