oracle 10 ,数据库表记录约30万
索引:
create index DOM_DOC_OIDNAME_IDX on d_doc(oid,name,to_char(oid+1),createdate);
原始语句:
select OID,name,CONCAT(name,(oid+1)) from d_doc where CONCAT(name,(oid+1)) ='PL000016632601987' and to_date(CREATEDATE, 'DD-MON-yy') = (select to_date(sysdate, 'DD-MON-YY') from dual)
改进语句:
select oid,name,name||to_char(oid+1) nnn from d_doc where name=substr('PL000016632601987',0,length('PL000016632601987')-length(oid)) and to_char(oid+1)=substr('PL000016632601987',length(name)+1,length('PL000016632601987')) and createdate>=to_date(sysdate, 'DD-MON-YY') and createdate<to_date(sysdate+1,'DD-MON-YY')
不加该索引之前,原始语句能查出结果,用时1.4s,改进后语句也能查出结果,用时0.4s。
加该索引后,再种查询均走这个索引,原始语句查不出结果,用时0.14s,改进后的能查出,用时0.14s。有谁知道原因?给说说原理。THX!