论坛首页 Java企业应用论坛

sql语句优化原则

浏览 24329 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (2) :: 隐藏帖 (5)
作者 正文
   发表时间:2010-05-09  
绑定变量也有特例
表a有个指示性字段ind,取值为Y,N,其中绝大部分都是Y,少数是N。我们要在其中找出N的记录,如果使用绑定变量,
ORACLE的CBO将不会使用索引,建立在此字段上的索引失效
select * from a where ind ='N';
0 请登录后投票
   发表时间:2010-05-09  
没有质疑最后一个的吗??
最起码我认为很多时候并非要写成一条。。
0 请登录后投票
   发表时间:2010-05-09  
Exists:
select * from table1 t1 where Exists (select 1 from table2 t2 where t1.id=t2.id);

如果t1表很大效率同样很低.

少用*
因为如果使用*则Oracle会去数据字典中找到相应表所对应的所有列,因此会影响效率.
0 请登录后投票
   发表时间:2010-05-09  
lyw985 写道
7.能用一句sql,千万别用2句sql
不解释


有时候,一条语句会非常复杂,甚至会干死数据库.
这时候,拆开来也未尝不可
0 请登录后投票
   发表时间:2010-05-09  
ziyu_1 写道
lyw985 写道
7.能用一句sql,千万别用2句sql
不解释


有时候,一条语句会非常复杂,甚至会干死数据库.
这时候,拆开来也未尝不可

还有就是一句sql太复杂不容易理解,拆开来更简单些,当然这可能影响些性能。
0 请登录后投票
   发表时间:2010-05-10  
6,7基本都质疑的。
6的这种写法能用的场景太少了,试试看就知道了。
7的话绝对错误,根据场景来定。

exists和in那个也不用说了。没有绝对的优化,都要根据系统业务来的。
0 请登录后投票
   发表时间:2010-05-10  
谁能好好解释一下exists和in具体是怎么执行的吗?
0 请登录后投票
   发表时间:2010-05-10  
绑定变量也有特例
表a有个指示性字段ind,取值为Y,N,其中绝大部分都是Y,少数是N。我们要在其中找出N的记录,如果使用绑定变量,
ORACLE的CBO将不会使用索引,建立在此字段上的索引失效
select * from a where ind ='N';


Oracle 11G  增加了变量感知的概念.所以索引继续有效
0 请登录后投票
   发表时间:2010-05-10  
个人感觉sql优化还是具体问题具体分析的好,总结一些大原则是非常棒的。但,是很难放之四海皆准的。我个人的感觉是,优化效率首先考虑的是减少io和处理数据分块。一般做好是查看执行计划,确定优化原则。应用上,比较流行的就是缓冲和读写分类、切分表吧?
0 请登录后投票
   发表时间:2010-05-10  
exists我用不好啊,查出来的结果和in不一样的,后来我只敢用in了
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics