SQL语句优化
来源:互联网 发布:大嘴女网络歌手 编辑:程序博客网 时间:2024/06/07 09:37
1、count(*) <---> count(列)
没有索引的情况下,两者一样快;
有索引的情况下,如果这一列允许为 null,则count(列)快,若不允许为空,则一样快!
这是由于count(*)与count(列)不等价,count(*)所有列只要有一列不为null,就会被统计出来,count(列)只要这一列为null,就不会被统计出来!
所以,count(列)所谓的快是没有把数据统计完整!!!
伦理片 http://www.dotdy.com/
count(列)每一通是否相同?
NO! 列的偏移量决定性能,列越靠后,访问的开销越大!而count(*)的算法与列无关,所以count(*)最快,count(最后一列)最慢!
2、FROM后跟的表的顺序
ORACLE FROM 后的表执行顺序是从后往前,所以就有规定:数据量少的表放在后面,数据量大的表放在前面。
这个规定不是没有道理,但是这个仅限于已经过时(SELECT /*+rule*/ ...)这种方式,现在放前放后性能都一样!
3、IN EXIST
ORACLE 10g ---> IN用的是filter算法,exist用的是anti算法,anti的反连接算法比filter算法更高效,但要指定非空后,IN用的也是anti算法,这样两者效率就会相同!
ORACLE 11g ---> IN EXIST用的算法都是anti的反连接算法,所以效率一样!
待续......
没有索引的情况下,两者一样快;
有索引的情况下,如果这一列允许为 null,则count(列)快,若不允许为空,则一样快!
这是由于count(*)与count(列)不等价,count(*)所有列只要有一列不为null,就会被统计出来,count(列)只要这一列为null,就不会被统计出来!
所以,count(列)所谓的快是没有把数据统计完整!!!
伦理片 http://www.dotdy.com/
count(列)每一通是否相同?
NO! 列的偏移量决定性能,列越靠后,访问的开销越大!而count(*)的算法与列无关,所以count(*)最快,count(最后一列)最慢!
2、FROM后跟的表的顺序
ORACLE FROM 后的表执行顺序是从后往前,所以就有规定:数据量少的表放在后面,数据量大的表放在前面。
这个规定不是没有道理,但是这个仅限于已经过时(SELECT /*+rule*/ ...)这种方式,现在放前放后性能都一样!
3、IN EXIST
ORACLE 10g ---> IN用的是filter算法,exist用的是anti算法,anti的反连接算法比filter算法更高效,但要指定非空后,IN用的也是anti算法,这样两者效率就会相同!
ORACLE 11g ---> IN EXIST用的算法都是anti的反连接算法,所以效率一样!
待续......
0 0
- SQL语句优化
- SQL语句优化
- SQL 语句优化
- SQL语句的优化
- SQL语句优化.
- 关于优化SQL语句
- SQL语句优化
- SQL 语句优化
- 如何优化sql语句
- sql语句的优化
- sql语句优化
- SQL语句优化汇总
- sql语句优化
- SQL语句优化汇总
- SQL语句优化汇总
- SQL语句优化
- 优化SQL语句方法
- sql语句优化实例
- CSS在限宽容器内实现全宽显示
- 每天一个linux命令(41):ps命令
- Java之设计模式之Singleton
- Vim 命令整理-复制粘贴
- Gradle配置
- SQL语句优化
- 常用正则表达式
- @GeneratedValue 与 @GenericGenerator
- Error:Configuration with name 'default' not found.
- yum 方式在centos上 mysql 安装过程
- mysql把一个表某个字段的内容复制到另一张表的某个字段的SQL语句写法
- 使用cookie保存访问商品记录
- Java性能调优:利用JMC分析性能
- NotificationManager