Oracle 如何创建索引,以便以下语句具有索引

Oracle 如何创建索引,以便以下语句具有索引,oracle,oracle11g,Oracle,Oracle11g,我有表A(id、名称、代码) 我有一个sql语句: Select * from A where upper(code || name) like upper('%<search text>%'); 从where-upper(代码| |名称)中选择*如upper('%'); 如何创建索引,使下面的语句具有索引? 两个选项的问题:表已分区,表未分区 谢谢&BR您是否有性能问题,或者这只是一个假设问题 在这个例子中,索引不太可能有帮助:全表扫描可能是最快的解决方案。为什么?您的表有3列

我有表A(id、名称、代码)

我有一个sql语句:

Select * from A where upper(code || name) like upper('%<search text>%');
从where-upper(代码| |名称)中选择*如upper('%');
如何创建索引,使下面的语句具有索引? 两个选项的问题:表已分区,表未分区


谢谢&BR

您是否有性能问题,或者这只是一个假设问题

在这个例子中,索引不太可能有帮助:全表扫描可能是最快的解决方案。为什么?您的表有3列。最好的索引应该是一个完全避免查表的索引

create index ai on a (code, name, id);
但这需要包含与表相同的所有数据,并为每个表行添加一个ROWID,因此它将比表大,并且扫描时间更长。您可以尝试将列放在具有最小选择性的索引中,然后使用压缩:

create index ai on a (code, name, id) compress;
现在索引可能小于表-这取决于代码和名称列的选择性。如果它足够小,优化器可能会决定使用它而不是表。它仍然包含所有ID和rowid,因此大小的减少可能不会太大。在测试用例中,我设置的压缩索引大约是表大小的一半,但是解释计划显示,如果我使用提示强制查询使用索引,查询的成本会更高——可能是由于压缩的开销,我不知道


您可以查看Oracle文本,
包含
表达式,但随后您将编写一个不同的查询,而不是像那样使用

您可以创建一个基于函数的索引,但类似的内容意味着它可能无论如何都不会使用该索引。还有提问的指导方针;不回答,基于函数的索引不能与类似“%”一起使用。谢谢索引按字母顺序或顺序存储数据-如果您像“%TEXT”一样搜索,为什么希望oracle使用索引?但是,它也适用于类似“TEXT%”的情况。您可以将谓词更改为使用类似于
CONTAINS
(可以使用Oracle文本索引)的内容,还是谓词必须采用那种精确的格式?我知道Oracle文本索引(CONTEXT-CONTAINS,CTXCAT-CATSEARCH),但我无法确定是否按代码(code | | name)创建索引我想问一下是否可以创建索引((代码| |名称))?而插入、更新表时的性能会如何?物理存储数据库文件的大小是否增加了?我本来打算使用上下文索引,但我希望查询的结果是上述语句的结果。从where upper(代码| |名称)中选择*如upper(“%%”);