频道栏目
首页 > 资讯 > Oracle > 正文

Oracle数据库SQL优化教程

17-11-11        来源:[db:作者]  
收藏   我要投稿

SQL 优化

使用where子句过滤行 使用表连接而不是多个查询 执行连接时使用完全限定的列引用 使用case表达式而不是多个查询 添加表索引

当单个查询的行数小于等于表总行数的10%时,建立b-树索引

对于包含小范围值且在查询的where子句中频繁使用的列,应使用位图索引 使用where并不是having 使用union all而不是使用union

因为union要删除重复的行,索引尽量使用union all而不是使用union 使用exists而不是in

exists只检查行的存在性,而in检查实际的值。所以通常情况下exists性能比in的性能好 使用exists而不是distinct

因为distinct在排除重复行之前要对检索到的行排序 使用grouping sets而不是cube

一般情况下:grouping sets比cube性能好 使用绑定变量

oracle会缓存已经执行的sql语句;如果以后执行相同的语句,就重用缓存的sql语句。

重用缓存的sql语句,sql语句必须完全相同,包括:

sql语句中的所有字符必须相同

sql语句中所有字母的大小写必须相同

sql语句中所有空格必须相同

使用绑定变量定义相同的sql语句

variable v_test_id number

begin
:v_test_id := 1;
end;
select * from test where id = :v_test_id;

比较执行查询的成本

oracle数据库软件使用称为优化器的子系统,生成访问表中存储数据的最有效路径。优化器生成的路径称为执行计划。

1>检查执行计划description

describe plan_table

如果有类似的表,那么就是有计划表,否则就要创建表

2>创建计划表

3>生成执行计划

语法:

explain plan set statement_id = statement_id for sql_statement;
4>查询计划表
5>表连接的执行计划
explain plan set statement_id = '*****' for
6>收集表统计信息
analyze table test compute statictics;
优化器传递提示
explain plan set statement_id = 'hint' for
select /*+ first_rows(2) */ t.id,t.year
from test
where id = 1;
相关TAG标签
上一篇:XML多个根节点提示“文档中根元素后面的标记必须格式正确”问题的解决办法
下一篇:Win7和win8升级win10系统后能上QQ但网页打不开怎么办?
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站