Oracle加索引

本文介绍了在Oracle数据库中创建和使用索引以提高数据检索效率的方法。通过示例展示了如何查看索引、创建自定义索引,并列举了索引可能失效的情况,包括OR操作符、函数、IS NULL、NOT条件和通配符%的不当使用。提醒程序员在优化查询时注意这些细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

创建索引的最终目的:提高数据检索效率。


         首先,让我们查看一下scott.emp下有没有索引:

         select index_name from all_indexes where table_name='EMP'

         结果发现系统给主键是自建索引的:PK_EMP

         

         接着自定义索引列:job和deptno

         create index i_job_deptno on emp(job,deptno)


 重复第一步,验证是否成功。



         如何正确使用索引?

  

         1.如果where子句出现OR操作符或者单独引用deptno列,则索引失效。


  select *from emp where job=' CLERK' ------走索引

         select *from emp where deptno=10    ------不走索引


         select *from emp where job='CLERK' and deptno=10  -------走索引


         select *from emp where job='CLERK' or deptno=10     -------不走索引

         2.避免在索引上使用函数。select *from emp where substr(ename,1,2)='SM' -----失效

         3.避免在索引上使用IS NULL/IS NOT NULL。select *from emp where job is null-----失效

         4.避免在索引列上使用NOT(!=、<>)。select *from emp where job!='CLERK'-----失效

         5.注意通配符%的使用

           select *from emp where job like '%CLERK%'   ------失效

           select *from emp where job like 'CLERK%'      ------高效


程序员必备神器,简单实用,工作之余请不要忘记锻炼哦~点击打开链接

       

         


         

          

Oracle数据库中的索引如果添得不当,可能会导致查询性能下降而不是提升。以下是一些可能导致这种情况的原因: 1. **过多索引**:为表中的每个列都创建索引虽然看起来可以速查询,但实际上会增存储空间开销,并在插入、删除和更新数据时消耗更多时间。因为每次操作都需要维护所有相关的索引。 2. **冗余索引**:针对已经包含其他索引列的组合,额外创建索引可能导致资源浪费,因为数据库系统需要判断是否应该优先使用哪个索引。 3. **选择不适合的索引类型**:如对文本字段使用B树索引,而非全文索引,对于模糊搜索效率不高。 4. **未优化的覆盖索引**:如果索引包含了查询所需的所有信息,那么查询可以直接从索引中完成,而无需访问表,但如果索引设计不合理,则可能导致全表扫描。 5. **索引碎片化**:频繁的数据修改可能导致索引变得不连续,这将降低查询性能。定期重建或合并索引可以帮助解决这个问题。 6. **索引键长度过长**:如果索引键太长,可能会占用较多的存储空间,并影响I/O性能。 如果你遇到这样的情况,你可以采取以下措施: - 分析查询计划以确定哪些索引被用于查询,哪些可能是瓶颈。 - 删除冗余或不必要的索引。 - 优化索引结构,例如选择合适的索引类型,调整索引大小等。 - 考虑使用分区或分片来分散负载。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值