首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Oracle性能优化系列之三——索引

提升Oracle性能的方法中,索引(Index)是最直接效果最明显的手段。本文分三部分,如何创建索引,避免索引失效,索引不适用情况。

1、创建索引

索引是Oracle的对象之一,它依附于表而存在。

索引就相当于书籍的目录。

通过目录可以更快的找到书籍中特定的章节,而不用翻遍全书。

通过索引可以更快的查到表中特定的数据,而不用扫描全表。

索引的具体原理不赘述,创建索引非常简单:

也可以用PL/SQL的图形界面创建,输入索引名(Name),选择索引的列(Colums),Apply即可:

两种创建方法都可以看出,索引是建立在表的某一字段或某几个字段上的。

索引建立后,使用索引的一个或多个字段,作为WHERE语句的条件进行查询时,会比没有索引时速度快很多。当然是在数据量大的情况下,数据量小的话差距不明显。

2、避免索引失效

为了性能优化而创建了索引,并非创建完就高枕无忧了。

在编写SQL语句时要避免一些语句,才能充分发挥索引的作用。

在WHERE子句中出现以下情况,均会导致Oracle的SQL引擎放弃使用索引而进行全表扫描:

使用操作符

进行is null或is not null判断

使用or连接条件

进行like '%123'查询(like '123%'不影响索引)

使用in或not in(between 1 and 100不影响索引)

对等号左侧使用表达式num/2=100(num=200不影响索引)

对等号左侧使用函数substr(str,1,15)='苟利国家生死以,岂因祸福避趋之'

未使用组合索引第一个字段(索引字段为(a,b),WHERE条件只有b)

3、索引不适用情况

(1)对于不是非常频繁查询的字段,不应建立索引。

索引可以提升查询效率,其代价是需要数据库空间存储索引信息,且表格每次insert、update和delete,都产生额外的消耗进行索引的更新。

(2)字段中有大量重复数据时,不必建立索引。

例如STUDENT表中的SEX字段,男和女各占一半,即使建立了索引对查询效率也没有任何提升。

(3)频繁进行更新的字段,不应建立索引。理由同(1)。

(4)长的VARCHAR2和LOB等大字段,不要建立索引。

(5)数据量小的表格,不必建立索引。

4、总结

使用索引,要结合业务语句进行分析,灵活运用才能切实提升数据库性能。

Oracle性能优化系列到此结束,本系列只涉及了常见的优化方法,更多的内容有待自行探索。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180317G1H5B800?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券