梦梦,
我有一些表的连接,我想给 db2-database 一个提示,我希望她使用哪个索引。我知道,这可能会导致查询缓慢,但是我有一个生产数据库和一个测试数据库,并且我希望两个数据库中的行为相同(即使在一个数据库中数据量显着不同或(索引- )缓存有。
这可能(以及如何)?我在在线手册中没有找到任何内容,这可能意味着我的搜索条件有误。
太感谢了。
这不是 DB2 经常做的事情。但是,您可以使用选择性。它应该仍然存在于当前版本中。向查询添加选择性子句将影响查询优化器做出的决策。
上面提到的吉尔伯特·勒布朗(Gilbert Le Blanc)也将起作用。您可以更新syscat.tables 列并欺骗 DB2 来优化对行中不存在的数据量的查询。此外,您的 DB / DBM CFG 的其余部分应该匹配(即计算的磁盘和 cpu 速度、内存使用相关设置等),因为在某些情况下它们可能在某种程度上也很重要。
您可以通过配置文件影响优化器:
但是,我还没有听说过选择性条款,我认为您应该先尝试此选项,然后再创建配置文件。但是您应该在尝试其他选项后立即执行此操作。在影响优化器之前,请按照 DeveloperWorks 教程中指示的步骤进行操作:
尝试不同的 SQL 优化类。默认优化类由数据库配置文件中的 DFT_QUERYOPT 参数控制。
尝试通过确保已收集正确的数据库统计信息来解决任何性能问题。统计数据越详细,优化器的性能就越好。(请参阅 DB2 命令参考中的 RUNSTATS)。
如果糟糕的访问计划是表特征快速变化的结果(即增长非常快以至于统计信息很快过时),请尝试使用 ALTER TABLE 命令将表标记为 VOLATILE。
尝试使用文字值而不是谓词中的参数标记来解释查询。如果您在使用参数标记时获得不同的访问计划,它将帮助您更好地了解性能问题的本质。您可能会发现在您的应用程序中使用文字会以 SQL 编译开销为代价产生更好的计划(从而获得更好的性能)。
尝试使用 DB2 的索引顾问 (db2advis) 来查看是否有任何您可能忽略的有用索引。