[性能调优]在PeopleSoft中使用函数索引

那些没有在PeopleSoft系统遇到性能问题的人,特别是基于Oracle数据库的PeopleSoft,可能不知道基于函数的索引。

根据定义,基于函数的索引是使用如下方法定义的:

  • 基于表达式,例如算术表达式或包含函数的表达式

  • 基于降序列(descending ordered column)

然后还有一种叫做函数索引的的表达式,这些索引是包含在索引列周围的表达式的索引。他们在PeopleSoft中非常罕见,为了提高特定SQL语句的性能而创建。

例如PS_NAMES表,有一个索引PS4NAMES中字段NAME_AC为主导列:

SELECT * from PS_NAMES WHERE name_ac='CHENCHEN'

可以看到上述查询语句走的是索引扫描代价是2。

比如我不知道NAME_AC中存储的是大写的拼音还是小写的拼音,一般会用如下SQL语句来查询:

SELECT * from PS_NAMES WHERE UPPER(name_ac)='CHENCHEN'

如果加上UPPER就会走全表扫描,代价是5,显然更花费时间。

添加函数索引到PS_NAMES表。

CREATE INDEX PSZNAMES ON PS_NAMES (UPPER(NAME_AC));

接下来再执行查看代价

可以看到走的是索引扫描,代价是1.

当您在表DBA_IND_COLUMNS中查看索引时,显示的类似是SYS_NC00033$,这是系统生生的列名,要找到真正的列名,要到表DBA_IND_EXPRESSIONS中的COLUMN_EXPRESSION列查看,如图:

基于函数的索引只能通过数据库中创建,不能通过AD工具创建。

我的公众号:

原文地址:https://www.cnblogs.com/eason-liu/p/7136163.html