提升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性能优化系列到此结束,本系列只涉及了常见的优化方法,更多的内容有待自行探索。
领取专属 10元无门槛券
私享最新 技术干货