暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle SQL优化之Index

Oracle优化大师 2018-11-29
828

       

        大家都知道,索引Index是提高查询速度的重要手段;数据量越大,性价比越高。其实索引是一个模式对象,其中包含每个值的条目,该条目出现在表或集群的索引列中,并提供对行的直接快速访问。


       创建索引:  create index 索引名 on 表名 (字段名);

       删除索引:   drop   index 索引名;

       建立索引的目的就是为了加快查询速度,建立索引后会使DML操作效率慢,但是对用户查询会提高效率。删除一个表时,相对应的索引也会删除。另外,索引是会进行排序。


      创建索引就是为了减少物理读,索引会减少扫描的时间。在经常要用到WHERE的子句的字段,应该使用索引,另外还要看所查询的数据与全部数据的百分比,表越大,查询的记录越少,索引的效率就越高.;


举例: 【函数索引】

CREATE INDEX upper_ix ON employees (UPPER(last_name));


使用:

SELECT first_name,

               last_name

  FROM  employees

 WHERE  upper(last_name) IS NOT NULL  -- 索引失效

 ORDER BY upper(last_name);


SELECT first_name,

               last_name

  FROM  employees

 WHERE  upper(last_name)   =‘TOM’  -- 索引有效

 ORDER BY upper(last_name);




       为了增加Oracle数据库使用索引而不是执行全表扫描的可能性,请确保函数在后续查询中返回的值不为空。如果没有WHERE子句,Oracle数据库可能会执行全表扫描。


注意事项:

1  WHERE之后的字段条件,需与索引一致,否则可能失效。

2  NULL 或者NOT NULL 都会破坏索引。


举例: CREATE INDEX ix_birth  mployees (birthday);


查询语句:  

 SELECT  birthday

   FROM   mployees

  WHERE to_char(birthday,

                'YYYY-MM') = '2018-01';

结果:索引没有效果;

若 

CREATE INDEX ix_birth  mployees (to_char(birthday,'yyyy-mm'));


查询语句:  

 SELECT  birthday

   FROM   mployees

  WHERE to_char(birthday,

                'YYYY-MM') = '2018-01';

结果:索引有效果;


下期更精彩......



本文分享自微信公众号 - Oracle优化大师,如有侵权,请联系 service001@enmotech.com 删除。
文章转载自Oracle优化大师,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论