我有表A(id,name,code)
我有sql语句:
Select * from A where upper(code || name) like upper('%<search text>%');
如何创建索引以便以下语句具有索引? 有两个选项的问题:表分区,表未分区
谢谢&amp; BR
答案 0 :(得分:0)
您是否存在性能问题,或者这只是一个假设问题?
索引不太可能对此示例有所帮助:全表扫描可能是最快的解决方案。为什么?你的桌子有3列。最好的索引是避免在表格中查看的索引。
create index ai on a (code, name, id);
但是这需要包含与表格相同的所有数据以及每个表格行的ROWID - 因此它将比表格更大并且需要更长的时间来扫描。您可以尝试将列放在索引中,选择性最低并使用压缩:
create index ai on a (code, name, id) compress;
现在索引可能小于表 - 它取决于代码和名称列的选择性。如果它足够小,优化器可能会决定使用它而不是表。它仍然包含所有ID和ROWID,因此尺寸的减小可能不会是戏剧性的。在测试用例中,我设置的压缩索引大约是表的一半,但解释计划显示如果我使用提示强制它使用索引,查询的成本会更高 - 可能是由于压缩的开销,我不知道。
您可以查看Oracle Text和CONTAINS
表达式 - 但是您将编写不同的查询,而不是使用LIKE
。