select * from PBERP.ITEM WHERE FACT_NO='123' and partno='H2-21100462A9000'
-- 1 second
SELECT ITEM.PARTNO,ITEM.DESCRIPT FROM pberp.ITEM WHERE ITEM.FACT_NO='123' and item.partno like '%H2-21100462A9000%'
--20 secondselect * from pberp.item where ITEM.FACT_NO='123' and instr(item.partno ,'H2-21100462A9000')>0
--19 second
select count(*)from pberp.item--count=395742直接查询,不到1秒,两种方法模糊查询竟然要用20秒以上,找大仙看看有没有 什么办法让模糊查询快些,谢谢
解决方案 »
- 跪求高人指点,oracle 索引重建后,查询数据非常慢几乎无法使用;数据库导出来放到其他服务器也是一样。
- AIX 6.1 安装10G(RAC)报syncr inc 32 lvl 2 from 1 rcvd (my inc,lvl: 32, 1)
- Oracle 导入出错
- 求教oracle表中一个日期时间的读取
- sql求助
- oracle 用存储过程备份数据库中的表 每月备份一次
- 请问什么地方可以下载Oracle 8.17 for linux?
- 请问:多个字段连接的语句如何优化?
- 请问哪里有oledb的驱动?
- 磁盘坏了,控制文件问题无法启动。:(
- 利用procedure实现高级查询[oracle]
- Oracle 怎样做这样的更新?
select * from PBERP.ITEM WHERE FACT_NO='123' and partno='H2-21100462A9000'
-- 1 second
这个也要1秒么??? 为何?我感觉30多万 不至于这么慢~
另外,如果一定要使用like查询,那么你需要使用线程分批查询,这样做的目的不是为了提高效率,而是为了分担负载。
出现运算无效,ORACLE 8.5I
SELECT ITEM.PARTNO,ITEM.DESCRIPT FROM pberp.ITEM WHERE ITEM.FACT_NO='123' and item.partno like '%H2-21100462A9000%'
-->
SELECT ITEM.PARTNO,ITEM.DESCRIPT FROM pberp.ITEM WHERE ITEM.FACT_NO='123' and item.partno like '%H2-21100462A9000'
另外一种情况,对索引字段用函数处理过了,也不会走索引,比如楼主第三条SQL中的:instr(item.partno ,'H2-21100462A9000')>0
所以我想楼主这个表的索引字段应该是partNo。如果表很大,而必须对partno字段加前置的模糊查询,那就没办法优化了
select * from pberp.item where ITEM.FACT_NO='123' and instr(item.partno ,'H2-21100462A9000')>0
建立FACT_NO,partno索引试试,instr应该走这个索引的其实最好不用like查询
这样查询的话,数据每次都要硬解析一遍,。
试试 execute immediate
'SELECT ITEM.PARTNO,ITEM.DESCRIPT FROM pberp.ITEM WHERE ITEM.FACT_NO=:1 and instr(item.partno,:2)>0 '
using '123','H2-21100462A9000';
2, 用 LIKE 'H2-21100462A9000%'