DB2优化n行

63lcw9qa  于 2022-11-07  发布在  DB2
关注(0)|答案(1)|浏览(229)

我正在学习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到底是做什么的?谢谢!

egdjgwm8

egdjgwm81#

使用OPTIMIZE FOR n ROWS是否会使查询更有效?
不一定。但是,如果有一个访问计划替代方案可以更快地找到与查询标准匹配的 * 第一行 *,则这可能会导致应用程序提前开始接收行,尽管 * 整个查询 * 将因此运行更长时间。
Db2 for LUW docs中有这样一个位,它提供了一些特定于该平台的示例:
请尝试沿着指定OPTIMIZE FOR n ROWSFETCH FIRST n ROWS ONLY,以鼓励查询访问计划直接从被引用表返回行,而不必先执行缓冲操作,例如插入临时表、排序或插入散列联接散列表。
指定OPTIMIZE FOR n ROWS以鼓励查询访问计划避免缓冲操作但检索整个结果集的应用程序可能会遇到性能不佳的问题。这是因为,如果检索整个结果集,则返回前 n 行最快的查询访问计划可能不是最佳查询访问计划。

相关问题