SQL的优化

时间:2022-09-11 09:37:39

摘要:论文论述了SQL优化的方法,通过一些简单的 SQL 优化规则就可以不同程度地提升 SQL 语句的效率。

关键词:SQL;效率

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2013)10-2275-03

Oracle提供了两种方式访问全表:

1)全表扫描

全表扫描就是顺序遍历全表,Oracle采用一次读入多个数据块(database t_b)的方式对全表扫描做了优化,但是全表扫描的效率是比较低的。

2)通过row_id来访问

row_id包含了记录的物理地址信息,采用基于row_id的方式来访问表可以提高效率。而索引就是oracle联系数据和存放数据的物理地址的纽带,通常,索引提供了快速访问row_id的方法,所以基于索引列的查询就能实现效率的提升,通常大型表的索引对效率的提升作用特别明显。

索引的使用也要得当,不恰当的索引反而事倍功半,通常需要注意的是以下几点:

1)在经常进行连接的列上建立索引。

2)在经常进行group by或者order by操作的列上建立索引。

3)在where语句部分常用到的,并且有较多不同值的列建索引,不要在取值少的列建索引。

5)要避免在索引列上使用IS NULL和IS NOT NULL。对唯一索引,如索引列包含空值,那么索引中将不存在此记录;对复合索引,如果每个列均为空,索引中同样不存在此记录(如果索引列有一个不为空,则记录存在于索引中)。所以要避免在索引中使用可以为空的列,因为ORACLE将无法使用该索引。可以将索引列为空的记录进行赋值,或者直接指定索引列为NOT NULL。

2 注意FROM子句的顺序

ORACLE采用从右到左的顺序来处理FROM子句中的表,写在最后的表会被最先处理。在需要从多张表查询数据的时候,按记录数多少降序列出各张表将获得最高效率。ORACLE在处理多张表时,用排序和合并的方式连接数据:先扫描第一张表,也就是FROM子句最后的那张表,并对数据进行排序,接着扫描第二张表,也就是FROM子句的倒数第二张表,然后将从第二张表取出的数据和第一张表取出的数据进行合并,依此类推。

3 注意WHERE子句的顺序

ORACLE使用自下而上的顺序来解析WHERE子句,所以,能过滤最多纪录的条件要写在WHERE子句的最后,几个表之间的连接则写在最前。

4 发生数据变化的时候,要使用COMMIT

编写程序和存储过程的时候,只要发生数据变化,就要记得写上COMMIT,这样程序和存储过程的性能会得到提升,随着COMMIT释放资源,需求也会随之减少。

5 精简查询的次数

12 避免对搜索参数使用其他数学操作符

WHERE条件左边不使用数学操作符,可以略微提高执行速度。

由于系统在繁忙的应用中,服务器的CPU的使用率在不断变化中,同一SQL语句,两次执行的时间就可能不同,上述SQL优化的例子中的执行时间是我2次执行的平均时间,所以能反映出不同语句的效率差异。

上述优化规则有的能提高效率上千倍,有的只能提高效率百分之几,但是对多终端的系统而言,应用程序和复杂的存储过程如果都能应用以上规则,就可以提升整个系统的性能,从而能高效处理各项事务。

参考文献:

[1] 崔群法. SQL Server 2008中文版从入门到精通[M].北京:电子工业出版社,2009.

[2] 马军,李玉林. SQL语言与数据库操作技术大全:基于SQL server实现[M].北京:电子工业出版社,2008.

上一篇:老年人要依法保护自己的房产 下一篇:鲜为人知的春节习俗