求提高搜索速度的方案 表A(100万多条记录)中含某一字段FIELD_1(NVARCHAR2 2000,已经建立索引),该字段存放如下格式的内容:";1001;4003;1002;1005;53123;”,要搜索其中某一内容:如“;1002;”.问题:目前我用的LIKE进行搜索,但速度极慢,可能要等上60秒才能查出,有无方案解决搜索速度问题?(目标2-3秒),是否必须得用LIKE进行搜索?有无不改变表结构,而提高速度的方案? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 if instr('1002',FIELD_1) > 0 then --sql代码end if; 你这个可以采用Oracle全文索引来提高性能。 这是全文搜索CREATE TABLE MY_ITEMS( ID NUMBER(10) NOT NULL, NAME VARCHAR2(200 BYTE) NOT NULL, DESCRIPTION VARCHAR2(4000 BYTE) NOT NULL, PRICE NUMBER(14,2) NOT NULL) CREATE INDEX MY_ITEMS_NAME_IDX ON MY_ITEMS(DESCRIPTION)INDEXTYPE IS CTXSYS.CTXCAT; 可以考虑建基于INSTR的函数索引... 如果";1001;4003;1002;1005;53123;"内的元素是有限的,可枚举的,建instr函数索引是相当便捷的办法不过看题意,应该不可能吧 基于自定义函数的Function-Based索引创建:http://oracle.chinaitlab.com/exploiture/531800.html另外: 在创建和使用基于函数的索引之前,需要做一些最初的设置。为了创建这个索引,需要有一些特权。下面是为了使用基于函数的索引需要做的工作:为了在自己的模式中的表上创建基于函数的索引,必须有系统特权QUERY REWRITE。为了在其他模式中的表上创建基于函数的索引,必须有系统特权GLOBAL QUERY REWRITE。使用基于成本的优化器。基于函数的索引只对基于成本的优化器是可见的,基于规则的优化器永远不会使用。使用SUBSTR约束从用户写的函数中返回VARCHAR2或RAW类型的值。对于优化器使用基于函数的索引,必须设置如下的会话或系统变量: QUERY_REWRITE_ENABLED=TRUE QUERY_REWRITE_INTEGRITY=TRUSTED create index idx_1 on A(instr(FIELD_1,';1002;')); 用Oracle自带的函数:instr('1002',FIELD_1) > 0 速度会很快的,不妨一试~~ 看来得用instr()取代like尝试下了 估计楼主是用的like %+条件+%,这样索引是没用的 请问如何把一个数组字段赋值入查询语句? 这段sql语句块能直接在pl/sql中执行吗 过程执行好慢 Oracle允许执行存储过程但不能查看或导出其定义 --求一SQL语句(例转行)-- 外连接其中一边是具体值的情况 ORACLE net 8连接问题 新手请教!Oracle多表查询能不能使用inner join 语句? 关于decode 请问从sql server 2000把数据导入oracle 9i,哪些字段类型不能导?? 关于ORACLE索引的一个效率测试 才1千万行的数据库居然占用33G的空间????请高手指点怎么优化数据表,谢谢!!!
--sql代码
end if;
CREATE TABLE MY_ITEMS
(
ID NUMBER(10) NOT NULL,
NAME VARCHAR2(200 BYTE) NOT NULL,
DESCRIPTION VARCHAR2(4000 BYTE) NOT NULL,
PRICE NUMBER(14,2) NOT NULL
)
CREATE INDEX MY_ITEMS_NAME_IDX ON MY_ITEMS
(DESCRIPTION)
INDEXTYPE IS CTXSYS.CTXCAT;
不过看题意,应该不可能吧
http://oracle.chinaitlab.com/exploiture/531800.html另外:
在创建和使用基于函数的索引之前,需要做一些最初的设置。为了创建这个索引,需要有一些特权。下面是为了使用基于函数的索引需要做的工作:
为了在自己的模式中的表上创建基于函数的索引,必须有系统特权QUERY REWRITE。
为了在其他模式中的表上创建基于函数的索引,必须有系统特权GLOBAL QUERY REWRITE。
使用基于成本的优化器。基于函数的索引只对基于成本的优化器是可见的,基于规则的优化器永远不会使用。
使用SUBSTR约束从用户写的函数中返回VARCHAR2或RAW类型的值。
对于优化器使用基于函数的索引,必须设置如下的会话或系统变量:
QUERY_REWRITE_ENABLED=TRUE
QUERY_REWRITE_INTEGRITY=TRUSTED
create index idx_1 on A(instr(FIELD_1,';1002;'));