码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2017-07-08 12:23:01      阅读:198      评论:0      收藏:0      [点我收藏+]

标签:sql   函数   问题   end   log   全表扫描   表达式   data   一个   

那些没有在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工具创建。

我的公众号:

技术分享

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

标签:sql   函数   问题   end   log   全表扫描   表达式   data   一个   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!