数据库

本类阅读TOP10

·SQL语句导入导出大全
·SQL Server日期计算
·SQL语句导入导出大全
·SQL to Excel 的应用
·Oracle中password file的作用及说明
·MS SQLServer OLEDB分布式事务无法启动的一般解决方案
·sqlserver2000数据库置疑的解决方法
·一个比较实用的大数据量分页存储过程
·如何在正运行 SQL Server 7.0 的服务器之间传输登录和密码
·SQL中两台服务器间使用连接服务器

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
oracle数据库优化

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

优化就是选择最有效的方法来执行SQL语句。Oracle优化器选择它认为最有效的

方法来执行SQL语句。

 

1)      IS NULLIS NOT NULL

如果某列存在NULL值,即使对该列建立索引也不会提高性能。

2)      为不同的工作编写不同的SQL语句块

为完成不同的工作编写一大块SQL程序不是好方法。它往往导致每个任务的结果不优

化。若要SQL完成不同的工作,一般应编写不同的语句块比编写一个要好。

3)      IN EXISTS

Select name from employee where name not in (select name from student);

Select name from employee where not exists (select name from student);

第一句SQL语句的执行效率不如第二句。

通过使用EXISTSOracle会首先检查主查询,然后运行子查询直到它找到第一个匹配

项,这就节省了时间。Oracle在执行IN子查询时,首先执行子查询,并将获得的结果

列表存放在一个加了索引的临时表中。在执行子查询之前,系统先将主查询挂起,待

子查询执行完毕,存放在临时表中以后再执行主查询。这也就是使用EXISTS比使用IN

通常查询速度快的原因。

4)      NOT 运算符

Select * from employee where salary<>1000;

Select * from employee where salary<1000 or salary>1000;

第一句SQL语句的执行效率不如第二句,因为第二句SQL语句可以使用索引。

5)      Order By 语句

Order By 语句的执行效率很低,因为它要排序。应避免在Order By 字句中使用表达式。

6)      列的连接

select * from employee where name||department=’ZYZBIOINFO’;

select * from employee where name=’ZYZ’ and department=’BIOINFO’;

这两个查询,第二句比第一句会快,因为对于有连接运算符’||’的查询,Oracle优化器是不

会使用索引的。

7)      通配符‘%’当通配符出现在搜索词首时,Oracle优化器不使用索引

Select * from employee where name like ‘%Z%’;

Select * from employee where name like ‘Z%’;

第二句的执行效率会比第一句快,但查询结果集可能会不同。

8)      应尽量避免混合类型的表达式

假设字段studentnoVARCHAR2类型

有语句select * from student where studentno>123;

Oracle会有一个隐含的类型转换。隐含的类型转换可能会使Oracle优化器忽略索引。

这时应使用显式的类型转换select * from student where studentno=to_char(123)

9)DISTINCT

   DISTINCT总是建立一个排序,所以查询速度也慢。


相关文章

相关软件