HashTableScan 扫描散列连接的生成端,就像它是内存表一样,从而将具有下面第一种结构的计划转换成具有下面第二种结构的计划,其中 idx
是可用于探查存储在散列表中的连接键值的索引:
table1<seq>*JH ( <operator>... ( table2<seq> ) )
table1<seq>*JF ( <operator>... ( HTS JNB table2<idx> ) )
当散列连接和扫描之间具有干预运算符时,散列表扫描会减少必须由其它运算符处理的所需行数。当索引探测的选择性很高时(例如,当生成端的行数与索引的基数相比较少时),此策略最有用。
如果散列连接的生成端很大,则执行常规顺序扫描会更有效。
优化程序会计算域值生成大小,方式与它为散列连接替代执行计算阈值相似。如果生成端中的行数超过此阈值,则会放弃 HashTableScan,执行期间 (HTS JNB table<idx>)
将被视为顺序扫描 (table<seq>)
。
如果散列表的生成端不得不溢出到磁盘,则会使用顺序策略。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |