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

Anju Gandhi
Toad for Oracle

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.


Feb 28

Written by: 中文技术资料库
2/28/2011 12:45 PM  RssIcon

 (原文: “HOW QUEST SQL OPTIMIZER WORKS WITH HINTS” 作者:虹天软件(珠海)有限公司 杜伟业(Richard To) 原文投稿日期:2007年8月14日 星期二)

当今的数据库厂商更愿意为最终用户提供一种手段来影响一条SQL语句使用执行计划的决定。这是因为数据库的优化器不能保证它们能为一条给定的SQL语句产生最佳的执行计划。但是,当你应用优化提示(Optimization Hints)时,有时指定的提示(Hints)可能并没有影响到数据库的SQL优化器的决定。之所以优化器没有按照提示(Hints)的方向来选择执行计划,是你的SQL语句的语法阻止了数据库的SQL优化器去采用提示(Hints)。

我们来看看下面带有提示 (Hints) 和不带提示 (Hints) 的SQL语句和执行计划:

看下执行计划,这个例子显示那个USE_NL提示没有引起Oracle的SQL优化器为这条SQL语句产生嵌套循环(Nested Loop)连接。其实这是经常发生的情况,由于SQL语法的限制,数据库的SQL优化器不会按照你的提示。对于复杂的SQL语句,情况更为复杂,因为我们可能无法分辨是否提示(Hints)将被采用或者由于采用了提示(Hints)后结果是不是会变好。这就是为什么Quest SQL Optimizer采用不同的方法而没有走知识导向型的SQL调优路线。Quest SQL Optimizer中的那个SQL变换引擎将尝试尽可能多的重写SQL语法的组合并且结合了应用优化提示 (Optimization Hints) ,以探索数据库的SQL优化器的潜能,如下图所示:

这个SQL变换引擎的第一步变换了原SQL语句并且产生了一组可选的SQL语句,所有这些可选的SQL语句仍然提供了完全相同的结果集。然后Quest SQL Optimizer重写每个新产生的SQL语句并且生成另一组可选的SQL语句。引擎将继续重写每个可选的SQL语句,直到所有的SQL语句不能被重写或者直到配额用尽。

在这个SQL变换引擎用尽了对SQL语句语法的重写后,优化提示(Optimization Hints)就会被应用到原SQL语句和被重写过的每个可选的SQL语句,直到所有选择的提示(Hints)都被应用了或者直到配额用尽。

这个SQL变换引擎免去了人们“试验和错误”的努力,取而代之是复杂的计算机算法。其结果是语法重写和应用提示(Hints)结合的一个可选SQL的集合。你需要做的就是测试每个可选SQL的性能,并找出一个更好的去替代你的性能差的原SQL语句。

Search Blog Entries
 
Blog Archives
 
Archive
<May 2013>
SunMonTueWedThuFriSat
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678
Monthly
May, 2013 (15)
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)