sql - 在优化 Oracle 查询方面需要帮助
问题描述
我想出了一个查询,从包含93781665个条目的表中获取数据,以在自动完成文本框中将结果显示为建议。
但是获取结果需要300 多秒。
查询如下。
select * from table
where upper(column1||' '||column2||' '||column3) like upper('searchstring%')
and rownum <= 10;
请帮我优化它。
解决方案
查询中的WHERE
子句不是sargable,这意味着那里不能使用索引。这排除了您可能在此处用于优化查询的大多数方法。这里有一个建议:
SELECT *
FROM yourTable
WHERE column4 LIKE 'SEARCHSTRING%';
在这里,column4
是表中的一个新列,其中包含前三列的串联。此外,所有文本都column4
将始终为大写,并且您传递给查询的搜索字符串也将始终为大写。鉴于这些假设,以下索引可能有助于查询:
CREATE INDEX idx ON yourTable (column4);
推荐阅读
- html - 日期选择器选择列表溢出不起作用
- bash - 目标特定变量 - 找不到命令错误 - 生成文件
- python - 如何在python中运行后台任务
- java - 数组的特定元素匹配多个条件并返回布尔值
- php - 向带有子项的 Wordpress 导航项添加额外元素
- java - Java UML 图
- angular - 离子 5:找不到名称“角度”
- java - 如何在自己的类中制作文本文件
- python - 增加时间的最佳方法是什么?
- node.js - npm 错误!错误:EACCES:权限被拒绝,访问 '/Users/patrikkozak/.npm-global/lib/node_modules/@vue/cli'