WELCOME, GUEST
Minimize
Blogger List

Steven Feuerstein Indicates Oracle ACE director status
PL/SQL Obsession

Guy Harrison Indicates Oracle ACE status
Database topics

Bert Scalzo Indicates Oracle ACE status
Toad for Oracle, Data Modeling, Benchmarking
Dan Hotka Indicates Oracle ACE director status
SQL Tuning & PL/SQL Tips

Valentin Baev
It's all about Toad

Ben Boise
Toad SC Discussions

Dan Clamage
SQL and PL/SQL

Kevin Dalton
Benchmark Factory

Peter Evans 
Business Intelligence, Data Integration, Cloud and Big Data

Vaclav Frolik  
Toad Data Modeler, Toad Extension for Eclipse

Devin Gallagher
Toad SC discussions

Stuart Hodgins
JProbe Discussions

Julie Hyman
Toad for Data Analysts

  Henrik "Mauritz" Johnson
Toad Tips & Tricks on the "other" Toads
  Mark Kurtz
Toad SC discussions
Daniel Norwood
Tips & Tricks on Toad Solutions
Amit Parikh
Toad for Oracle, Benchmark Factory,Quest Backup Reporter
Debbie Peabody
Toad Data Point
Gary Piper
Toad Reports Manager
John Pocknell
Toad Solutions
Jeff Podlasek
Toad for DB2
Kuljit Sangha
Toad SC discussions
Michael Sass 
Toad for DB2
Brad Wulf
Toad SC discussions
Richard To
SQL Optimization
  Toad Data Modeler Opens in a new window
Data Modeling
 
  Toad Higher Education
How Hi-Ed Uses Toad
  Real Automated Code Testing for Oracle
Quest Code Tester blog
  中文技术资料库
技术文章
 

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  RssIcon

原文:“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引擎企图寻找不同驱动路径的次数。 

如果你想对Quest SQL Optimizer for Oracle了解更多, 请访问 Inside SQL Optimizer for Oracle community.

Search Blog Entries
 
Blog Archives
 
Archive
<May 2013>
SunMonTueWedThuFriSat
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678
Monthly
May, 2013 (13)
April, 2013 (13)
March, 2013 (10)
February, 2013 (5)
January, 2013 (7)
December, 2012 (6)
November, 2012 (10)
October, 2012 (8)
September, 2012 (6)
August, 2012 (8)
July, 2012 (8)
June, 2012 (12)
May, 2012 (21)
April, 2012 (10)
March, 2012 (16)
February, 2012 (19)
January, 2012 (20)
December, 2011 (19)
November, 2011 (14)
October, 2011 (12)
September, 2011 (17)
August, 2011 (15)
July, 2011 (16)
June, 2011 (13)
May, 2011 (15)
April, 2011 (8)
March, 2011 (21)
February, 2011 (17)
January, 2011 (16)
December, 2010 (13)
November, 2010 (13)
October, 2010 (7)
September, 2010 (15)
August, 2010 (11)
July, 2010 (13)
June, 2010 (12)
May, 2010 (14)
April, 2010 (12)
March, 2010 (13)
February, 2010 (12)
January, 2010 (7)
December, 2009 (10)
November, 2009 (12)
October, 2009 (15)
September, 2009 (18)
August, 2009 (13)
July, 2009 (23)
June, 2009 (14)
May, 2009 (17)
April, 2009 (7)
March, 2009 (14)
February, 2009 (7)
January, 2009 (12)
December, 2008 (7)
November, 2008 (11)
October, 2008 (19)
September, 2008 (14)
August, 2008 (11)
July, 2008 (14)
June, 2008 (19)
May, 2008 (12)
April, 2008 (18)
March, 2008 (13)
February, 2008 (8)
January, 2008 (7)
December, 2007 (5)
November, 2007 (8)
October, 2007 (13)
September, 2007 (13)
August, 2007 (16)
July, 2007 (11)
June, 2007 (6)
May, 2007 (5)
April, 2007 (5)
March, 2007 (8)
February, 2007 (6)
January, 2007 (6)
December, 2006 (5)
November, 2006 (8)
October, 2006 (4)
August, 2006 (3)