基础sql优化

造成sql性能低大概分为两个部分:

1、程序员在开发过程中只注重查询结果的正确性,很少去考虑查询语句的效率;

2、sql语句的执行原理以及影响sql语句执行效率的原因不清楚。

 

sql语句书写过程中应该养成的习惯:

 

1、FORM规则:oracle解析器解析sql语句是从FROM关键字的最后从右自左依次解析的,两个表联查的时候将数据量小的先解析会提高效率,三个及以上表查询时将交叉表结果最小的先解析。

 

2、WHERE规则:Oracle采用自下而上的顺序解析WHERE子句。 根据这个原理,表之间的连接必须写在其他WHERE条件之前,那些可以过滤掉最大数量记录的条件必须写在WHERE子句末尾。

3、SELECT规则:oracle数据解析会对 * 查询数据字典兑换成相应列,尽量使用详细列来查询。

4、TRANCATE规则:适用于全表删除,trancate删除表记录时无法恢复;delete在删除记录的时候会在rollback段中保存删除信息以恢复。

5、COMMIT规则

 

只要有可能,在程序中尽量多使用COMMIT, 这样程序的性能得到提高,需求也会因为COMMIT所释放的资源而减少。

COMMIT所释放的资源:

回滚段上用于恢复数据的信息.

被程序语句获得的锁

redo log buffer 中的空间

ORACLE为管理上述3种资源中的内部花费

 

6、 计算记录条数

Select count(*) from tablename;

Select count(1) from tablename;

Select max(rownum) from tablename;

一般认为,在没有索引的情况之下,第一种方式最快。 如果有索引列,使用索引列当然最快。

 

7、 用Where子句替换Having子句

避免使用HAVING子句,HAVING 只会在检索出所有记录之后才对结果集进行过滤。这个处理需要排序、总计等操作。 如果能通过WHERE子句限制记录的数目,就能减少这方面的开销。

 

8、使用表的别名(Alias)

当在SQL语句中连接多个表时, 请使用表的别名并把别名前缀于每个Column.这样一来,就可以减少解析的时间并减少那些由Column歧义引起的语法错误。

Column歧义指的是由于SQL中不同的表具有相同的Column,SQL语句中出现这个Column,SQL解析器无法判断这个Column的归属。

 

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值