下载此文档

SQLO优化简介.docx


文档分类:IT计算机 | 页数:约8页 举报非法文档有奖
1/8
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/8 下载此文档
文档列表 文档介绍
贞脚
写出高效的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 ();
insert into test date(name tday) values ();
insert into test date() values ('james’,sysdate);
select * from test. date;
一创建decode函数索引来代替
create index finx_day on test_date(decode(,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优化简介 来自淘豆网www.taodocs.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数8
  • 收藏数0 收藏
  • 顶次数0
  • 上传人changjinlai
  • 文件大小25 KB
  • 时间2021-10-20