sql语句的细节优化
2015-05-29 16:58
106 查看
Sql优化这个话题说来好像很宏大似的,如果你的数据库负载能力超牛B,完全可以不去耗费心思去捋sql;但,话有说回来,一个有条有理的sql,就代表了一个程序员的个人风格,有谁不希望自己的代码被人模仿或称赞呢?废话少说,直接看下文,有不同意见,及时回复,商讨。
1. 尽量使用列名代替*。2. Where条件的执行顺序:右→左。
where arg0 and arg1;当‘and’关键字两边都符合条件的情况下,条件才成立,为了提高效率,尽量把不符合条件的放在右边,按照条件执行顺序,先判断右边条件,一旦不成立,就不再判断左边的条件,进而提高sql语句的执行效率。
where arg0 or arg1;当‘or’关键字两边有一个条件成立时,这个where条件就会成立;按照条件执行的顺序,尽量把符合条件的放在右边,如果右边的成立,就不再执行左边的条件,进而提高sql语句的执行效率。
3. 如果在sql语句中where关键字和having关键字都可以使用的地方,尽量使用where关键字,因为,where关键字会先去除不符合条件的信息,可以减少查询的数据量;而having为过滤分组,它会把所有的信息先分组,再排除不符合条件的信息,如果在信息量比较大的表中,使用having会比使用where查询数据要慢些。
4. 在使用自连接的时候,表的数据量不能过大,因为自连接会产生笛卡尔积,查询产生的数据量为表中数据条数的平方;这时,适合使用层次查询,优点:不会产生笛卡尔积。缺点:查询得到的为一个树结构,不直观。
5. 在子查询和多表查询都可以实现查询的情况下,理论上,尽量使用多表查询。
6. 尽量不要使用集合运算,
因为,sql语句会随着集合个数的增加,运算时间会增加,效率会降低。
如下:上边的为集合运算,下边的为非集合运算
相关文章推荐
- redis主从复制
- Oracle数据库PLSQL的中文乱码显示全是问号
- mysql python 访问代码
- ORACLE数据库中的表连接关系
- sql 清除日志空间
- zabbix 之 orabbix安装指导
- mysql函数一
- Redis8种访问方式
- zabbix 之 mysql优化
- MongoDB内存管理机制
- 在数据库中使用表值函数分割字符串
- MySQL触发器的使用
- MySQL触发器的使用
- mysql常用排序问题
- 阿里云搭建NODEJS+EXPRESS+MONGODB实战
- Oracle备份常用命令
- oracle 网址
- Oracle学习(四)之设置内存参数
- (转)oracle表空间使用率统计查询
- oracle之报错:ORA-00054: 资源正忙,要求指定 NOWAIT