首页 > 解决方案 > 在优化 Oracle 查询方面需要帮助

问题描述

我想出了一个查询,从包含93781665个条目的表中获取数据,以在自动完成文本框中将结果显示为建议。

但是获取结果需要300 多秒。

查询如下。

select * from table
where upper(column1||' '||column2||' '||column3) like upper('searchstring%') 
and rownum <= 10;

请帮我优化它。

标签: sqloracle

解决方案


查询中的WHERE子句不是sargable,这意味着那里不能使用索引。这排除了您可能在此处用于优化查询的大多数方法。这里有一个建议:

SELECT *
FROM yourTable
WHERE column4 LIKE 'SEARCHSTRING%';

在这里,column4是表中的一个新列,其中包含前三列的串联。此外,所有文本都column4将始终为大写,并且您传递给查询的搜索字符串也将始终为大写。鉴于这些假设,以下索引可能有助于查询:

CREATE INDEX idx ON yourTable (column4);

推荐阅读