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。
VERIFICATION_TABLE
我认为查询要花很长时间,因为where子句中的功能。但是,我需要在列上执行ltrim rtrim,而且日期也必须在MM/DD/YYYY格式上匹配。如何优化此查询?
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
但是,在解释计划中,我看不到使用索引/主键。那是问题吗?
试试这个:
SELECT MAX(verification_id) FROM VERIFICATION_TABLE WHERE head = 687422 AND mbr = 23102 AND TRIM(lname) = '.iq bzw' AND TRUNCATE(dob) = TO_DATE('08/10/2004') AND system_code = 'M';
TRUNCATE()如果dob尚无时间,请从其外观(出生日期?)上删除该对象。除此之外,您还需要一些索引工作。如果要查询那么多的这种风格,我会指数mbr,并head在2列索引,如果你说的是什么意思列它会在这里帮助确定最佳的索引。
TRUNCATE()
dob
mbr
head