锁定老帖子 主题:sql语句优化原则
精华帖 (0) :: 良好帖 (0) :: 新手帖 (2) :: 隐藏帖 (5)
|
|
---|---|
作者 | 正文 |
发表时间:2010-05-09
绑定变量也有特例
表a有个指示性字段ind,取值为Y,N,其中绝大部分都是Y,少数是N。我们要在其中找出N的记录,如果使用绑定变量, ORACLE的CBO将不会使用索引,建立在此字段上的索引失效 select * from a where ind ='N'; |
|
返回顶楼 | |
发表时间:2010-05-09
没有质疑最后一个的吗??
最起码我认为很多时候并非要写成一条。。 |
|
返回顶楼 | |
发表时间:2010-05-09
Exists:
select * from table1 t1 where Exists (select 1 from table2 t2 where t1.id=t2.id); 如果t1表很大效率同样很低. 少用* 因为如果使用*则Oracle会去数据字典中找到相应表所对应的所有列,因此会影响效率. |
|
返回顶楼 | |
发表时间:2010-05-09
lyw985 写道 7.能用一句sql,千万别用2句sql
不解释 有时候,一条语句会非常复杂,甚至会干死数据库. 这时候,拆开来也未尝不可 |
|
返回顶楼 | |
发表时间:2010-05-09
ziyu_1 写道 lyw985 写道 7.能用一句sql,千万别用2句sql
不解释 有时候,一条语句会非常复杂,甚至会干死数据库. 这时候,拆开来也未尝不可 还有就是一句sql太复杂不容易理解,拆开来更简单些,当然这可能影响些性能。 |
|
返回顶楼 | |
发表时间:2010-05-10
6,7基本都质疑的。
6的这种写法能用的场景太少了,试试看就知道了。 7的话绝对错误,根据场景来定。 exists和in那个也不用说了。没有绝对的优化,都要根据系统业务来的。 |
|
返回顶楼 | |
发表时间:2010-05-10
谁能好好解释一下exists和in具体是怎么执行的吗?
|
|
返回顶楼 | |
发表时间:2010-05-10
绑定变量也有特例
表a有个指示性字段ind,取值为Y,N,其中绝大部分都是Y,少数是N。我们要在其中找出N的记录,如果使用绑定变量, ORACLE的CBO将不会使用索引,建立在此字段上的索引失效 select * from a where ind ='N'; Oracle 11G 增加了变量感知的概念.所以索引继续有效 |
|
返回顶楼 | |
发表时间:2010-05-10
个人感觉sql优化还是具体问题具体分析的好,总结一些大原则是非常棒的。但,是很难放之四海皆准的。我个人的感觉是,优化效率首先考虑的是减少io和处理数据分块。一般做好是查看执行计划,确定优化原则。应用上,比较流行的就是缓冲和读写分类、切分表吧?
|
|
返回顶楼 | |
发表时间:2010-05-10
exists我用不好啊,查出来的结果和in不一样的,后来我只敢用in了
|
|
返回顶楼 | |