|
|
Blogs
Toad World blogs are a mix of insightful how-tos from Quest experts as well as their commentary on experiences with new database technologies. Have some views of your own to share? Post your comments! Note: Comments are restricted to registered Toad World users.
Do you have a topic that you'd like discussed? We'd love to hear from you. Send us your idea for a blog topic.
Jan
17
Written by:
中文技术资料库
1/17/2012 5:10 PM
原文:“OPTIMIZING SQL PART 7 – REARRANGING THE DRIVING PATH” 原文投稿日期:2009年1月16日
作者:虹天软件(珠海)有限公司 杜伟业(Richard To)
这篇博客是关于在Quest SQL Optimizer for Oracle中使用Batch Optimizer和Tuning Lab模块优化SQL过程的续篇。它涉及的是寻找从数据库中获取数据的最佳驱动路径的重要性。
我们将使用一个嵌套循环操作的简单示例,它访问两个表来获取数据。表A有10,000,000行,表B有1,000行。
如果一条SQL语句被重写之后的执行计划在有1千万行的表 A上做全表扫描,在表B上做索引扫描(假设索引树的每个父节点只有两个子节点),这将会导致34,538,776个操作。
如果一条SQL语句被重写之后的执行计划在只有1000条记录的表B上做全表扫描,在表 A上做索引扫描,这将会导致8,059个操作。如果你写了一条先访问大表的SQL语句,你可以在改变用哪个表来做全表扫描之后很容易地看到极大的性能提高。
Quest SQL Optimizer用来重写SQL语法的转换规则之一是重新安排“驱动路径”或者获取数据时访问表的次序。
当一条SQL语句用嵌套循环连接来访问2个表,有两个方法可以连接表。如果使用3个表,可以连接表的方法个数是3! (3*2*1) 或者 6,它意味着优化过程可以产生6条SQL语句。如果SQL语句中有6个表被访问,连接表的方法个数是6!也就是720,因此,优化过程使用这条语法转换规则能产生720条SQL语句。如果SQL语法的配额(语法转换的配额)是100,你可以看到一条能产生720条语句的规则可能用完所有配额。SQL optimizer有超过60条可以应用到初始SQL语句的语法转换规则。因此,这条重新安排驱动路径的规则需要暂停来检查配额,不至于让所有的替代SQL都由这一条规则产生。
那就是选项Table join permutation quota所起的作用。它限制SQL Optimizer引擎企图寻找不同驱动路径的次数。
|
|