我有一个 Oracle 平面表,它增长到略低于 800MB。该表被截断,正在插入新记录。目前表中有 <40 条记录,但一条select *
需要 >30 秒。
这可能是因为表仍然很大(约 800MB)以至于需要很长时间?
没有索引。
编辑
我从清理桌子的人那里发现他们做了一个delete
而不是一个truncate
我有一个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 …