1 / 8
文档名称:

SQLO优化简介.docx

格式:docx   大小:25KB   页数:8页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

文档介绍:贞脚

写出高效的SQL
在多数情况下,Oracle使用索引来更快地遍历表,优化器主要根据定义的索引来提高性能。但是, 如果在SQL语句的where子句中写的SQL代码不合理,就会造成优化器删去索引而使用全表扫描,一般 就这种SQL语句就是所谓的劣质SQL语句。在编写SQL语句时我们应清楚优化器根据何种原则来删除索 引,这有助于写出高性能的SQL语句。
1. IS NULL 与 IS NOT NULL
避免在索引中使用任何可以为空的列,ORACLE将无法使用该索引。
对于单列索引,如果列包含空值,索引中将不存在此记录;
对于复合索引,如果每个列都为空,索引中同样不存在此记录;
如果至少有一个列不为空,则记录存在于索引中。
举例:
如果唯一性索引建立在表的A列和B列上,并且表中存在一条记录的A,B值为(123,null),
ORACLE将不接受下一条具有相同A,B值(123,null)的记录(插入),
然而如果所有的索引列都为空,ORACLE将认为整个键值为空而空不等于空。
因此你可以插入1000条具有相同键值的记录,当然它们都是空!
因为空值不存在于索引列中,所以WHERE子句中对索引列进行空值比较将使ORACLE停用该索引。
不能用null作索引,任何包含null值的列都将不会被包含在索引中。即使索引有多列这样的情况 下,只要这些列中有一列含有null,该列就会从索引中排除。也就是说如果某列存在空值,即使对该列 建索引也不会提高性能。
任何在where子句中使用is null或is not null的语句优化器是不允许使用索引的。
注意:如果我们必须要用is null,又需要提供查询效率可以用函数索引 实例如下:
create table test date (name varchar2(20),day date);
insert into test date(name ,day) values (rlucyr.null);
insert into test date(name tday) values (rjonyr.null);
insert into test date(name.day) values ('james’,sysdate);
select * from test. date;
一创建decode函数索引来代替
create index finx_day on test_date(decode(day.null,fN11 'Y'))
一使用decode判断来代替is null判断
select * from test, date a where decode (day,null,rNr,1Y*) = N
SELECT STATEMENT, GOAL = CHOOSE
TABLE ACCESS FULL Object owner=SP2 Object name=TEST_DATE 注意 要使用cost才会使用function index

贞脚

analyze table test date compute
statistics for table for al 1 indexes for al 1 indexed columns;
select * from

分享好友

预览全文

SQLO优化简介.docx

上传人:changjinlai 2021/10/20 文件大小:25 KB

下载得到文件列表

SQLO优化简介.docx

相关文档