我正在学习DB2,我遇到了这样一个子句:就在FETCH FIRST 100 ROWS ONLY
之后的OPTIMIZE FOR 1 ROW
我知道FETCH FIRST 100 ROWS ONLY
会给予我符合条件的前100行,但我不明白OPTIMIZE FOR 1 ROW
在这里到底做了什么。
使用OPTIMIZE FOR 1 ROW子句可以影响访问路径。OPTIMIZE FOR 1 ROW指示Db2选择一个访问路径,该路径可以快速返回第一个符合条件的行。
和this DB2文档中,它说
通常,如果只检索几行,请指定OPTIMIZE FOR 1 ROW以影响Db2选择的访问路径。
但是我还是很困惑,使用OPTIMIZE FOR n ROWS
会使查询更有效吗?
我还找到了this post on SO,根据已接受的答案,OPTIMIZE FOR n ROWS
似乎等效于FETCH FIRST n ROWS ONLY
。
但是当我自己使用OPTIMIZE FOR n ROWS
而不是FETCH FIRST n ROWS ONLY
进行实验时,结果集并不相同。使用OPTIMIZE FOR n ROWS
,查询返回所有符合条件的行。
有没有人能给我解释一下OPTIMIZE FOR n ROWS
到底是做什么的?谢谢!
1条答案
按热度按时间egdjgwm81#
使用
OPTIMIZE FOR n ROWS
是否会使查询更有效?不一定。但是,如果有一个访问计划替代方案可以更快地找到与查询标准匹配的 * 第一行 *,则这可能会导致应用程序提前开始接收行,尽管 * 整个查询 * 将因此运行更长时间。
在Db2 for LUW docs中有这样一个位,它提供了一些特定于该平台的示例:
请尝试沿着指定
OPTIMIZE FOR n ROWS
和FETCH FIRST n ROWS ONLY
,以鼓励查询访问计划直接从被引用表返回行,而不必先执行缓冲操作,例如插入临时表、排序或插入散列联接散列表。指定
OPTIMIZE FOR n ROWS
以鼓励查询访问计划避免缓冲操作但检索整个结果集的应用程序可能会遇到性能不佳的问题。这是因为,如果检索整个结果集,则返回前 n 行最快的查询访问计划可能不是最佳查询访问计划。