表A(100万多条记录)中含某一字段FIELD_1(NVARCHAR2 2000,已经建立索引),该字段存放如下格式的内容:";1001;4003;1002;1005;53123;”,要搜索其中某一内容:如“;1002;”.问题:目前我用的LIKE进行搜索,但速度极慢,可能要等上60秒才能查出,有无方案解决搜索速度问题?(目标2-3秒),是否必须得用LIKE进行搜索?有无不改变表结构,而提高速度的方案?
解决方案 »
- ORA-12514: TNS:listener does not currently know of service requested in connect
- 菜鸟问题,${}啥意思
- 跟踪.net程序中参数有值,但传不入oracle存储过程中
- hash子分区的数据是怎么分配在子分区上的
- 这样的情况下是否该用触发器?该如何写这个触发器
- 如何写SQL语句?
- 向老大们请教一个从数据库中返回多行结果级的问题,难点使用的游标存在于动态SQL语句
- oracle 9.2.0 在Redhat 7.3 下安装出错
- 远端客户端连服务端的问题?
- 在ORACLE中interal用户的口令是什么?
- 关于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;'));