在检索的时候用 instr 取代 like ,下面是测试结果:create table dali.da as select 'dsafsdsbbsdf' t from user_objects a,user_objects b where rownum<5000000;--18s select * from dali.da where t like '%cc%';--11s select * from dali.da where instr(t,'cc')>0;
按照大虾的方法: 表是否已分区,把要归类的号码分区,然后创建局部前缀索引+ 索引 + like
找到一个方法: --后七位同顺 IF INSTR('0123456789',SUBSTR('车牌号码',2,7)) <> 0 THEN PCODE := '七位同顺'; return; END IF; --后七位反顺 IF INSTR('9876543210',SUBSTR('车牌号码',2,7)) <> 0 THEN PCODE := '后七位反顺'; return; END IF;但是这里要做循环,否则6、5、4……位同顺的号码不能检索出来。 但是做循环可能又太慢。 可否改进。
select * from dali.da where t like '%cc%';--11s
select * from dali.da where instr(t,'cc')>0;
表是否已分区,把要归类的号码分区,然后创建局部前缀索引+ 索引 + like
--后七位同顺
IF INSTR('0123456789',SUBSTR('车牌号码',2,7)) <> 0 THEN
PCODE := '七位同顺';
return;
END IF;
--后七位反顺
IF INSTR('9876543210',SUBSTR('车牌号码',2,7)) <> 0 THEN
PCODE := '后七位反顺';
return;
END IF;但是这里要做循环,否则6、5、4……位同顺的号码不能检索出来。
但是做循环可能又太慢。
可否改进。
如果是ORACLE还有个全文索引。。
无论你怎样优化语句,用什么函数也不能解决性能问题,基本以分区表根本解决此问题.
有兴趣可以参考以下:
http://download-west.oracle.com/docs/cd/B10501_01/server.920/a96524/c12parti.htm#464767