我们正在使用Oracle 11g数据库.
正如你可能会或可能不知道,如果你在前面的字符串使用通配符查询用"%",列没有被使用的索引和全表扫描正在发生的事情.
看起来似乎没有关于如何改进此类查询的明确建议,但也许您可以根据您的经验分享一些有价值的信息,以了解如何优化以下查询:
SELECT *
FROM myTable
WHERE UPPER(CustomerName) like '%ABC%'
OR UPPER(IndemnifierOneName) like '%ABC%'
OR UPPER(IndemnifierTwoName) like '%ABC%';
Run Code Online (Sandbox Code Playgroud)
...其中所有3列的类型为varchar2(100),ABC是变量输入参数的值.
@All建议使用CONTEX索引,请注意我的数据每天的任何时间都会更新,而且这个索引需要重新同步,因此对于150万行的表来说这不是一个好的选择,抱歉.
PS我会支持每个答案,所以请保持他们的到来.