【发布时间】:2017-06-09 11:51:51
【问题描述】:
我可能在 Oracle 数据库中遇到了全表扫描。我无法执行数据库中的explain 命令,简单来说,我没有权限。
我正在尝试弄清楚以下问题。
如果我在table 中有一个关于NAME 的索引
使用此查询:
select OID
from table
where NAME=UPPER(v1)
and TYPE=v2
and PID=v3
and OID<>v4
and PID =v5`
(v1 是一个变量)
oracle 会使用name 上的索引来选择OID吗?
我已经阅读了一些材料,上面写着一个函数,在这种情况下NAME 索引将不会被使用。但是upper()是一个特殊的函数,所以之前看到的材料我也不是很确定。
这是@mathguy回答后的第二个问题:
如果我使用create index INDEX_NAME on table(upper(NAME));创建索引
请问:
select OID,PID
from table
where PID=v1
and NAME=UPPER(v2)
使用索引 INDEX_NAME?
或者在上面的问题中会使用索引,而查询效率不高,因此需要很长时间才能执行?
【问题讨论】:
-
1.看不到查询计划怎么知道是全扫描? 2. 全面扫描并不总是坏事! (例如,如果您的桌子不大)
-
如果有意义,那么是的,Oracle 将使用
name上的索引 -
您所说的关于许可的内容毫无意义。你是开发者吗?如果不是,为什么要关心索引和 FTS?所以我假设你是一个开发者。如果是这样,什么样的白痴(对不起,措辞苛刻)会雇用你成为一名开发人员,然后通过不允许你运行解释计划来阻止你正确地完成你的工作?去找你的经理,看看他们是否会改变这一点。
-
@LordPeter 有人指出这是全表扫描,而且表很大,选择可能需要 7-9 秒才能完成。
-
你假设错了。您可以安装免费的 Oracle Express Edition (XE) 并将其用于您想要的任何东西。您还可以免费安装和使用非免费版本(我使用的是企业版,EE),只要它仅用于评估或学习目的。我不在该领域工作,我免费使用 EE(具有所有 Oracle 功能,以及 XE 中不可用的 12.1 版),因为我只是在学习它,而不是将它用于其他任何事情。对于所有其他用途,您始终可以免费使用 XE。