当前位置:  数据库>window下通过ftp执行linux脚本? iis7站长之家

通过分析SQL语句的执行计划优化SQL

    来源: 互联网  发布时间:2014-10-04

    本文导语:  如何干预执行计划 - - 使用hints提示 基于代价的优化器是很聪明的,在绝大多数情况下它会选择正确的优化器,减轻了DBA的负担。但有时它也聪明反被聪明误,选择了很差的执行计划,使某个语句的执行变得奇慢无比。此时...

如何干预执行计划 - - 使用hints提示

基于代价的优化器是很聪明的,在绝大多数情况下它会选择正确的优化器,减轻了DBA的负担。但有时它也聪明反被聪明误,选择了很差的执行计划,使某个语句的执行变得奇慢无比。此时就需要DBA进行人为的干预,告诉优化器使用我们指定的存取路径或连接类型生成执行计划,从而使语句高效的运行。例如,如果我们认为对于一个特定的语句,执行全表扫描要比执行索引扫描更有效,则我们就可以指示优化器使用全表扫描。在Oracle中,是通过为语句添加hints(提示)来实现干预优化器优化的目的。

hints是oracle提供的一种机制,用来告诉优化器按照我们的告诉它的方式生成执行计划。我们可以用hints来实现:

1. 使用的优化器的类型

2.基于代价的优化器的优化目标,是all_rows还是first_rows。

3. 表的访问路径,是全表扫描,还是索引扫描,还是直接利用rowid。

4. 表之间的连接类型

5. 表之间的连接顺序

6. 语句的并行程度

除了”RULE”提示外,一旦使用的别的提示,语句就会自动的改为使用CBO优化器,此时如果你的数据字典中没有统计数据,就会使用缺省的统计数据。所以建议大家如果使用CBO或HINTS提示,则最好对表和索引进行定期的分析。

如何使用hints:

Hints只应用在它们所在sql语句块(statement block,由select、update、delete关键字标识)上,对其它SQL语句或语句的其它部分没有影响。如:对于使用union操作的2个sql语句,如果只在一个sql语句上有hints,则该hints不会影响另一个sql语句。

我们可以使用注释(comment)来为一个语句添加hints,一个语句块只能有一个注释,而且注释只能放在SELECT, UPDATE, or DELETE关键字的后面

使用hints的语法:

{DELETE|INSERT|SELECT|UPDATE} /*+ hint [text] [hint[text]]... */ or {DELETE|INSERT|SELECT|UPDATE} --+ hint [text] [hint[text]]...

注解:

1.DELETE、INSERT、SELECT和UPDATE是标识一个语句块开始的关键字,包含提示的注释只能出现在这些关键字的后面,否则提示无效。

2.“+”号表示该注释是一个hints,该加号必须立即跟在”/*”的后面,中间不能有空格。

3.hint是下面介绍的具体提示之一,如果包含多个提示,则每个提示之间需要用一个或多个空格隔开。

4.text 是其它说明hint的注释性文本

如果你没有正确的指定hints,Oracle将忽略该hints,并且不会给出任何错误。


    
 
 

您可能感兴趣的文章:

  • 如何通过界面或键盘来中断一个循环语句?
  • mysql查询语句通过limit来限制查询的行数
  • 请问通过纯jdbc能否联 sqlserver7.0,注意不是通过jdbc-odbc桥,如果能的话,driver在哪里下载?连接的语句怎么写?
  • 用shell执行一条语句后,可以通过 $? 来确定正确与否,如果为0 正确,如果非0不正确.
  • 为什么我在sqlserver里面可以运行的语句放到access里面就不能通过?
  • mysql通过查看跟踪日志跟踪执行的sql语句
  • 通过SQL语句来备份,还原数据库
  • 通过sql语句将blob里的char取出来转成数字保存在其它字段
  • 高分求救!怎样把shell脚本通过SQL语句查询的结果写到一个文件中?
  • 通过SQL语句直接把表导出为XML格式
  • 如何通过配置自动实现ValueList中hql语句的整型参数转换
  • 通过T_sql语句向其中一次填入一条数据或一次填入多条数据的方式填充数据
  • MySQL 通过索引优化含ORDER BY的语句
  • 通过T-SQL语句实现数据库备份与还原的代码
  • 在SQL中有函数,比如COUNT(*),怎样通过JDBC调用获得函数值????
  • 怎样通过Ip地址连接Sql server 数据库?
  • SQL Server误区30日谈 第21天 数据损坏可以通过重启SQL Server来修复
  • 一定得帮我看看sql server2000通过sql server2000jdbc driver的代码
  • Linux/UNIX下,C++程序通过那些步骤访问Oracle或者Sybase SQL数据库?
  • 怎么样才能不通过jdbc-odbc直接连到数据库,以sql7为例。
  • 用jsp通过jdbc.odbc桥如何向sql server中添加记录?
  • 通过sql存储过程发送邮件的方法
  • 通过SQL Server的位运算功能巧妙解决多选查询方法
  • 通过SQL绘制杨辉三角的实现方法介绍
  • jsp表单数据不能通过jdbc把数据输入到sql server中去,在tomcat控制台上显示:"not suitable driver"
  • 通过Java正则表达式去掉SQL代码中回车换行和多余空格
  • PHP防范SQL注入的具体方法详解(测试通过)
  • 请教通过Jdbc直接调用MS SQL2000数据库问题?
  • 如何通过SQL找出2个表里值不同的列的方法
  • 解析一个通过添加本地分区索引提高SQL性能的案例
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • linux下通过crond实现自动执行程序
  • window下通过ftp执行linux脚本?
  • linux能够通过执行脚本添加oracle数据库的用户吗
  • jar是通过批处理实现双击后执行的吗?
  • 用gcc编译c程序能通过,为何没执行结果?
  • 请问 pathclass设置正确 语法正确 编译通过 但在执行时 显示"Exception in thread "main" java.lang.NoClassDefFoundError"…………不解
  • 通过JDBC连接数据库,执行抄作后,关闭了连接,数据服务器端的进程还在,怎麽处理?
  • 我通过C程序执行tail -f printlog(printlog为日志名),想要动态获取里面新进来的日志,怎么办?
  • 通过串口下载后的程序如何执行?
  • JAVA_HOME等路径也设了,javac也通过了,执行却出事
  • 直接在终端启动程序和通过脚本或者exec函数执行有何不同?
  • UNIX程序编译通过后没法执行(急)
  • 问大哥大姐们个问题啊,小第编了自己的第一个JAVA问题。用JAVAC编译能通过啊!可是用JAVA不能执行啊!
  • 一个JAVA、JAVA3D的问题。编译通过,执行出错。
  • 小弟写了一个很简单的动态库实例函数用来学习,但编译通过之后执行可执行文件报错。跪请高手帮忙!!!!
  • Exception in thread "main" java.lang.NoClassDefFoundError:Ellsworth(这是我的文件)。上面是我编译通过之后,执行是出现的信息?哪里
  • 请教线程之间通过优先级的高低来判断由哪个线程来执行!
  • 通过javascript实现DIV居中,兼容各浏览器版本
  • applet可以不通过数字签名,通过设置IE直接在本地访问本地文件吗
  • php通过socket_bind()设置IP地址代码示例
  • 我使用.net编译通过,但是使用g++编译不能通过。总是提示我undefined reference to ~myclass()
  • 通过javascript库JQuery实现页面跳转功能代码
  • 紧急求救!能通过jdbc怎样连接sqlsever 然后通过 for xml 关键字得到xml流吗?
  • c#通过委托delegate与Dictionary实现action选择器代码举例
  • 我想我的网站屏蔽掉通过某些网站过来的访问,我想通过htaccess 文件来做,请大家帮帮我。
  • 通过docker commit命令保存对docker容器的修改
  • 如何通过INTERNET访问通过共项一条线路上网的局域网中的机器???
  • 通过docker run命令运行新的docker镜像
  • 为什么g++编译通过了,而gcc却编译通过不了???
  • 通过docker ps命令检查运行中的docker镜像
  • 请指点: 在windows下能否通过程序来获取linux下的用户列表,甚至通过自己写的windows程序界面增加修改linux的用户


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3