黑马程序员技术交流社区

标题: Oracle优化-自己总结 [打印本页]

作者: 聆听    时间: 2012-10-28 18:08
标题: Oracle优化-自己总结
-自己总结的,希望对大家有所帮助!
简化业务逻辑:
书写规范、统一
避免隐式数据类型转换
避免select  * ——表列数太多
尽量避免全表扫描——考虑索引和复合索引的第一列
书写规范——大小写等
Exists/Not Exists 代替 In/Not In——绝大多数情况(判断是否存在)
在满足业务要求的时候,Union all 代替Union(将多个表的查询集合成一条显示)
尽量避免使用 distinct、trim  (去除重复项,比较耗时,原因是它要把所有的数据取出来在去对比)


索引列:
不要使用 like ‘%abc’,可以使用‘abc%’(写在前面无法用Oracle索引)
不要在索引列使用函数
尽量用 >= 代替 >(>=少查询一个数)
尽量使用复合索引的第一列
避免使用is null、is not null   


in与exists的区别
in:确定给定的值是否与子查询或列表中的值相匹配。
exists:指定一个子查询,检测行的存在。

--效率高
select u.* from users u where exists(select userid from student where userid=u.id);
--效率低
select * from student where userid in (select id from users);

in与=的区别
select name from student where name in('李','高','张');
select name from student where name='李',name='高',name='张';
这两句的查询结果相同。

union与union all的区别:
union不允许有重复值,union all允许有重复值(相对而言效率高)
union操作符用于合并两个或多个select语句结果集
(注意:union内部的select语句必须拥有相同的数量的列,列也必须拥有相同的数据类型。同时,每条select语句中的列的顺序必须相同。)






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2