【发布时间】:2011-01-30 00:37:43
【问题描述】:
SELECT MAX(verification_id)
FROM VERIFICATION_TABLE
WHERE head = 687422
AND mbr = 23102
AND RTRIM(LTRIM(lname)) = '.iq bzw'
AND TO_CHAR(dob,'MM/DD/YYYY')= '08/10/2004'
AND system_code = 'M';
此查询需要 153 秒才能运行。 VERIFICATION_TABLE 中有数百万行。
我认为查询需要很长时间,因为 where 子句中的函数。但是,我需要在列上执行 ltrim rtrim 并且日期必须以MM/DD/YYYY 格式匹配。如何优化此查询?
解释计划:
SELECT STATEMENT, GOAL = ALL_ROWS 80604 1 59
SORT AGGREGATE 1 59
TABLE ACCESS FULL P181 VERIFICATION_TABLE 80604 1 59
主键:
VRFTN_PK Primary VERIFICATION_ID
索引:
N_VRFTN_IDX2 head, mbr, dob, lname, verification_id
N_VRFTN_IDX3 last_update_date
N_VRFTN_IDX4 mbr, lname, dob, verification_id
N_VRFTN_IDX4 verification_id
不过,在解释计划中,我没有看到正在使用索引/主键。是这个问题吗?
【问题讨论】:
-
你的表有主键或索引吗?应该不会花那么多时间....
标签: sql database oracle optimization