小编Pie*_*erk的帖子

查询在记录数低的表上花费很长时间

我有一个 Oracle 平面表,它增长到略低于 800MB。该表被截断,正在插入新记录。目前表中有 <40 条记录,但一条select *需要 >30 秒。

这可能是因为表仍然很大(约 800MB)以至于需要很长时间?

没有索引。

编辑

我从清理桌子的人那里发现他们做了一个delete而不是一个truncate

performance oracle-11g-r2 query-performance

3
推荐指数
1
解决办法
1894
查看次数

为什么强制全表扫描后查询运行速度更快?

我有一个MERGE语句需要永远执行选择,因为它从 ( SUB_DATA)运行的表相当大(读取 1.4 Tb,7 亿行)。我的SELECT看起来像这样。

SELECT MIN(TRUNC(DATETIME,'DD'))    AS FIRST_ACTIVITY,
       MAX(TRUNC(DATETIME,'DD'))    AS LAST_ACTIVITY,
       NVL(PHONE_NUMBER, '-1')      AS PHONE_NUMBER,
       MAX(NVL(PHONE_ID, '-1')) KEEP (DENSE_RANK LAST ORDER BY DATETIME) AS LAST_PHONE_ID,
       MAX(TYPE_ID) KEEP (DENSE_RANK LAST ORDER BY DATETIME)             AS TYPE_ID
FROM SUB_DATA   AD,
     SUB_PROF   ICP
WHERE DATETIME BETWEEN minDate AND maxDate
AND   PROFILE_ID = ICP.ICP_SEQID
AND   REF_RT_ID in (13, 63) 
AND   DURATION > 3 
AND   PHONE_NUMBER like '123%' 
GROUP BY NVL(PHONE_NUMBER, '-1')
Run Code Online (Sandbox Code Playgroud)

INDEXES桌子上有两个PHONE_NUMBER,一个在另一列上,一个在此处未使用的列上。

我努力让查询运行得更快,工作中的一位资深人士建议我强制使用FULL TABLE …

performance oracle-11g-r2 query-performance

3
推荐指数
1
解决办法
2743
查看次数