我想问,既然ORACLE优化器会自动选择最好的执行计划,那我们要从哪些方面来优化SQL呢(对于一个做多表连接的SQL)
解决方案 »
- 请问RAC一节点关机后,VIP转到另一节点的日志在哪里看呢?
- 数据库存储采取B+树的原因?
- 求助!我遇到了一个非常诡异的问题!!
- 哪位大侠 帮忙看看这个存储过程 oracle 以前没用过 今天刚弄的 都是错误
- 9i tkprof 没有怎么安装
- Oracle9i表名里含有数字是不是有后遗症啊?
- linux 下安装 oracle 9.0i
- 备份
- 【求助】'OraOLEDB.Oracle.1' provider is not registered on the local machine是为什么
- 用oradim重建实例后为何不能进行连接了?
- 大家帮我看看这个oracle触发器,执行时说变异表,怎么回事?
- 求Oracle一存储过程
在看SQL数据的写法效率!
1.硬件资源最优化配置(比如内存,CPU,IO)
2.访问路径的选择度(比如是否提供了合适的索引)
3.数据对象的统计特性是否准确收集
4.系统的访问特性相对稳定(没有突变)
在上述条件下,Oracle能提供最优的执行计划.那么优化的工作就聚焦在以上几个方面了.
针对上面的第四点,就需要具体问题具体解决了,在查询上使用优化提示能满足特定情况下的优化需求.数据库优化,本质上来说就是有限资源的最优化配置.最优化这一部分主要由Oracle来选择,那么我们需要最的就是找到这个资源的整体上限.
做NESTED LOOP连接的时候如何知道哪个表是驱动表,会不会我的驱动表是特别大的那张表(且根据JOIN条件选择出的记录数也远多于被驱动表)
SQL优化的一个很关键的原则就是把最繁重的工作的重复次数减到最少.
嵌套循环NESTED LOOP的驱动表就决定了这种工作的重复次数,而内部表所使用的访问路径就决定了这个工作的繁重程度..Oracle的优化器并不是万能的.大部分时候它并不能帮你优化逻辑,它只是帮你在有限资源下最优化实现你的逻辑.
其它的比如你已经GROUP BY了,在任何一个需要排序逻辑但对于特定的排序规则并不关注的地方,你完全不必要重复Order by
可能我要优化我的SQL需要更改SQL的逻辑或者使用HINT提示,那最后一个问题:
是不是PL/SQL中Explain Plan窗口中NESTED LOOP下的2个表,出现在上面的那个是驱动表?