【发布时间】:2011-09-07 22:29:37
【问题描述】:
我们使用的是 Oracle 11g 数据库。
您可能知道也可能不知道,如果您在字符串前面使用带有“%”的通配符查询,则列 index is not being used 并且 full table scan 是正在发生。
似乎没有关于如何改进此类查询的明确建议,但也许您可以根据您的经验分享一些关于如何优化以下查询的宝贵信息:
SELECT *
FROM myTable
WHERE UPPER(CustomerName) like '%ABC%'
OR UPPER(IndemnifierOneName) like '%ABC%'
OR UPPER(IndemnifierTwoName) like '%ABC%';
...其中所有 3 列都是 varchar2(100) 类型,ABC 是可变输入参数的值。
@All 建议 CONTEX 索引,请注意我的数据每天都会在一天中的任何时间更新,并且该索引需要重新同步,因此它不是一个好的选择对于 150 万行的表,抱歉。
附:我会为每一个答案投票,所以请继续关注。
【问题讨论】:
-
不做那种查询?它必须进行表扫描,因为前导
%表示该字段的前面可能有任何内容。这意味着它需要搜索该字段每一行的内容。 -
谢谢,不幸的是这不是一个选项
-
首先在 CustomerName、IndemnifierOneName、IndemnifierTwoName 字段上添加基于函数的索引,然后按照本文的建议进行操作:dba-oracle.com/t_sql_like_clause_index_usage.htm
-
Does Oracle support full text search? 的可能重复项。虽然不是逐字逐句,但所需的功能是......
标签: sql oracle indexing query-optimization