我们正在使用Oracle 11g数据库。
正如您可能会或可能不知道,如果您在字符串前面使用带有“%”的通配符查询,则不会使用索引列和全表扫描正在发生。LIKE'%...%'的PL/SQL性能调优通配符查询
它看起来像有没有关于如何提高这种查询的一个明确的建议,但也许你可以分享您的经验,就如何优化以下查询一些有价值的信息:
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万行表一个不错的选择,对不起。
P.S.我会积极回答每一个问题,所以请保持他们的到来。
不要做那种查询吗?它必须进行表扫描,因为前面的'%'表示在该字段的前面可能有任何东西。这意味着它需要搜索该字段每一行的内容。 – JNK 2011-06-03 15:53:25
感谢,不幸的是它不是一个选项 – Tsar 2011-06-03 15:55:45
首先在字段CustomerName,IndemnifierOneName,IndemnifierTwoName上添加一个基于函数的索引,然后按照本文的建议操作:http://www.dba-oracle.com/t_sql_like_clause_index_usage.htm – Chandu 2011-06-03 15:56:04