Sql 在oracle列中添加索引后,自动建议功能查询花费的时间太长
我知道这个问题已经被问了好几次了,但我还没有找到解决方案,我也不是数据库专家 因此,我的需求是实现自动建议功能,为此我编写了一个查询,从特定表的数百万行中提取数据。为此,我使用like运算符编写了一个查询,这需要花费大量时间。请您建议如何在oracle中优化查询 注意-:Sql 在oracle列中添加索引后,自动建议功能查询花费的时间太长,sql,performance,oracle11g,Sql,Performance,Oracle11g,我知道这个问题已经被问了好几次了,但我还没有找到解决方案,我也不是数据库专家 因此,我的需求是实现自动建议功能,为此我编写了一个查询,从特定表的数百万行中提取数据。为此,我使用like运算符编写了一个查询,这需要花费大量时间。请您建议如何在oracle中优化查询 注意-:索引已添加到名称列 质疑 选择不同的名称、标识符 从xyz信息 其中名称(如UPPER('a%')) ROWNUM首先,我建议您使用复合索引,(名称、标识符),而不是单列索引 第二,独特的真的有必要吗?也就是说,表中是否有重复项
索引已添加到名称列
质疑
选择不同的名称、标识符
从xyz信息
其中名称(如UPPER('a%'))
ROWNUM首先,我建议您使用复合索引,(名称、标识符)
,而不是单列索引
第二,独特的
真的有必要吗?也就是说,表中是否有重复项?如果是这样,我将修复副本并使用:
SELECT name, designator
FROM xyz info
WHERE name LIKE UPPER ( 'a%' ) and ROWNUM <= 20
ORDER BY name;
选择名称、标识符
从xyz信息
其中,UPPER('a%')和ROWNUM等名称向我们显示执行计划(请编辑您的问题纯文本,无屏幕截图)。另外:ROWNUM@a_horse_和_no_名称请参见上述执行计划。我不想通过使用查询在纯文本上获取执行计划,所以我粘贴了执行计划图像。该计划显示的位置条件与您的问题不同。该计划显示您正在使用upper(name)像'A%'
(而不是name像upper('A%')
),它不会在name
上使用索引。您需要在upper(name)
而不是name
上创建索引。下次,请发布执行计划的纯文本版本。这种图形化的东西通常隐藏了太多的细节。正如“no_name_horse”所说的,如果您使用(UPPER(name)),您必须在UPPER(name)上创建一个索引。“Gordon Linoff”的建议也是一个很好的建议,我将同时实施这两个建议。
SELECT name, designator
FROM xyz info
WHERE name LIKE UPPER ( 'a%' ) and ROWNUM <= 20
ORDER BY name;