首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >联调局关于串连字串的函数

联调局关于串连字串的函数
EN

Database Administration用户
提问于 2011-08-25 21:54:49
回答 2查看 1.2K关注 0票数 0

我有一个索引(从过去的日子起),我很好奇。它在一个基本的person表上,函数是

代码语言:javascript
复制
upper("LAST_NAME"||','||"FIRST_NAME"||"MIDDLE_NAME"||"SUFFIX_NAME")

当我试图搜索这个索引时,我最终得到了一个完整的表扫描。知道为什么吗?如果像我想的那样被完全破坏了,你会建议在这四列上建立一个列索引吗?

编辑

很抱歉没有提供查询。是的,查询是类似的,而且列都是空的。所以我有

代码语言:javascript
复制
select *
  from person p
  where UPPER("LAST_NAME"||','||"FIRST_NAME"||"MIDDLE_NAME"||"SUFFIX_NAME")
    like replace(upper('<search string here>'), '*', '%') || '%'

有什么想法吗?谢谢你的快速回答。

EN

回答 2

Database Administration用户

回答已采纳

发布于 2011-08-25 23:14:33

列是空的吗?查询是否类似?有NLS问题吗?

我希望

代码语言:javascript
复制
upper("LAST_NAME"||','||"FIRST_NAME"||"MIDDLE_NAME"||"SUFFIX_NAME") = :bind

使用索引范围扫描

代码语言:javascript
复制
upper("LAST_NAME"||','||"FIRST_NAME"||"MIDDLE_NAME"||"SUFFIX_NAME") LIKE :bind

可以使用索引快速全扫描或表扫描,这取决于表中的列是否可能是必需的。如果它认为每5行中就有1行与之匹配,并且每个行都需要一个列而不是索引中的列,那么使用index+table查找要比使用直表扫描慢。

可能是表很小,不值得使用索引。

票数 5
EN

Database Administration用户

发布于 2011-08-26 12:38:01

CBO应该考虑您提供的查询索引:

代码语言:javascript
复制
create table person( last_name varchar(100), 
                     first_name varchar(100), 
                     middle_name varchar(100), 
                     suffix_name varchar(100) );
insert into person(first_name, last_name) values ('Bob', 'Smith');
insert into person(first_name, last_name) values ('Bobby', 'Smith');
insert into person(first_name, last_name) values ('Bob', 'Smithson');
insert into person(first_name, last_name) values ('Bobby', 'Smithson');

insert into person(last_name, first_name)
select 'first name '||level, 'last name '||level from dual connect by level < 10000;

create index i_person 
  on person ((upper("LAST_NAME"||','||"FIRST_NAME"||"MIDDLE_NAME"||"SUFFIX_NAME")));

select *
  from person p
  where UPPER("LAST_NAME"||','||"FIRST_NAME"||"MIDDLE_NAME"||"SUFFIX_NAME") 
        like replace(upper('Smith*Bob*'), '*', '%') || '%';

 --explain plan shows: INDEX    I_PERSON    RANGE SCAN

此时,我将仔细检查所有内容,比如索引的DDL。

票数 2
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/5059

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档