如何提高oracle模糊查询的性能?1、使用两边加‘%’号的查询,Oracle是不通过索引的 , 所以查询效率很低 。
例如:select count(*) from lui_user_base t where t.user_name like '%cs%';
2、like '...%'和 like'%...'虽然走了索引,但是效率依然很低 。
3、有人说使用如下sql , 他的效率提高了10倍,但是数据量小的时候
select count(*) from lui_user_base where rowid in (select rowid from lui_user_base t where t.user_name like '%cs%')
我拿100w跳数据做了测试,效果一般 , 依然很慢,原因:
select rowid from lui_user_base t where t.user_name like '%cs%'这条sql执行很快,那是相当的快 , 但是放到select count(*) from lui_user_base where rowid in()里后,效率就会变的很慢了 。
4、select count(*) from lui_user_base t where instr(t.user_name,'cs') 0
这种查询效果很好,速度很快,推荐使用这种 。因为我对oracle内部机制不是很懂,只是对结果做了一个说明 。
5、有人说了用全文索引,我看了 , 步骤挺麻烦 , 但是是个不错的方法,留着备用:
对cmng_custominfo 表中的address字段做全文检索:
1,在oracle9201中需要创建一个分词的东西:
BEGIN
ctx_ddl.create_preference ('SMS_ADDRESS_LEXER', 'CHINESE_LEXER');
--ctx_ddl.create_preference ('my_lexer', 'chinese_vgram_lexer'); 不用
end;
2,创建全文检索:
CREATE INDEX INX_CUSTOMINFO_ADDR_DOCS ON cmng_custominfo(address) INDEXTYPE IS CTXSYS.CONTEXT PARAMETERS ('LEXER SMS_ADDRESS_LEXER');
3,查询时候 , 使用:
select * from cmng_custominfo where contains (address, '金色新城')1;
4 , 需要定期进行同步和优化:
同步:根据新增记录的文本内容更新全文搜索的索引 。
begin
ctx_ddl.sync_index('INX_CUSTOMINFO_ADDR_DOCS');
end;
优化:根据被删除记录清除全文搜索索引中的垃圾
begin
ctx_ddl.optimize_index('INX_CUSTOMINFO_ADDR_DOCS', 'FAST');
end;
5,采用job做步骤4中的工作:
1)该功能需要利用oracle的JOB功能来完成
因为oracle9I默认不启用JOB功能,所以首先需要增加ORACLE数据库实例的JOB配置参数:
job_queue_processes=5
重新启动oracle数据库服务和listener服务 。
2)同步 和 优化
--同步 sync:
variable jobno number;
BEGIN
DBMS_JOB.SUBMIT(:jobno,'ctx_ddl.sync_index(''INX_CUSTOMINFO_ADDR_DOCS'');',
SYSDATE, 'SYSDATE(1/24/4)');
commit;
END;
--优化
variable jobno number;
begin
DBMS_JOB.SUBMIT(:jobno,'ctx_ddl.optimize_index(''INX_CUSTOMINFO_ADDR_DOCS'',''FULL'');', SYSDATE, 'SYSDATE1');
commit;
END;
其中, 第一个job的SYSDATE(1/24/4)是指每隔15分钟同步一次 , 第二个job的SYSDATE1是每隔1天做一次全优化 。具体的时间间隔 , 可以根据应用的需要而定 。
6,索引重建
重建索引会删除原来的索引,重新生成索引,需要较长的时间 。
重建索引语法如下:
ALTER INDEX INX_CUSTOMINFO_ADDR_DOCS REBUILD;
据网上一些用家的体会,oracle重建索引的速度也是比较快的,有一用家这样描述:
Oracle 的全文检索建立和维护索引要比ms sql server都要快得多,笔者的65万记录的一个表建立索引只需要20分钟 , 同步一次只需要1分钟 。
因此,也可以考虑用job的办法定期重建索引 。
如何提高oracle的查询速度使用索引,使用精确定位条件筛选,使用子查询将数据量大的表筛选再进行多表连接查询,少使用模糊查询,注意条件的顺序等
如何提高oracle视图的查询速度?1、可以缩小到5张表oracle如何查询很快,因为很多都是从一张表里取出来的数据oracle如何查询很快;
2、不能子查询因为是要显示数据子查询只是查询条件oracle如何查询很快;
3不能建立索引oracle如何查询很快,因为这样会影响表的增删改,它里面都是导入进去的一次增加上千条都有可能;
4、定期结转是什么意思,表示没看懂 。时间发的太长的话就算了;
5、定期结转的意思就是,将你要建立视图的几种表数据“转移”到一张新表里面去 , 不用视图查询 。数据库全文检索是RDBMS自带的扩展功能,可以实现高速查询 。全文检索建议搜索下关键字,什么lucene之类的就出来了 。
高分 求助 向oracle 数据库 怎么插入数据 使查询时速度快逐条数据插入INSERT
数据导入的最简单方法就是编写 INSERT 语句oracle如何查询很快,将数据逐条插入数据库 。这种方法只适合导入少量数据,如 SQL*Plus 脚本创建某个表的种子数据 。该方法的最大缺点就是导入速度缓慢 , 占用oracle如何查询很快了大量的 CPU 处理时间,不适合大批量数据的导入;而其主要优点就是导入构思简单又有修改完善的弹性,不需要多做其它的准备就可以使用 。如果你有很多时间没法打发,又想折磨一下数据库和 CPU , 那这种方法正适合你 。
为oracle如何查询很快了与其它方法做比较,现将十万条记录通过此方法导入到 CALLS 表中,总共消耗 172 秒,其中导入进程占用 CPU 时间为 52 秒 。
逐条数据插入 INSERT , 表暂无索引
为什么上一种方法占用了较多的 CPU 处理时间,关键是 CALLS 表中已创建了索引,当一条数据插入到表中时,Oracle 需要判别新数据与老数据在索引方面是否有冲突,同时要更新表中的所有索引 , 重复更新索引会消耗一定的时间 。因此提高导入速度的好办法就是在创建表时先不创建索引或者在导入数据之前删除所有索引,在外部文件数据逐条插入到表中后再统一创建表的索引 。这样导入速度会提高,同时创建的索引也很紧凑而有效 , 这一原则同样适用于位图索引(Bitmap Index) 。对于主要的和唯一的关键约束(key constraints) , 可以使之先暂时失效(disabling)或者删除约束来获得同样的效果,当然这些做法会对已经存在的表的外键约束产生相关的影响,在删除前需要通盘斟酌 。
需要说明的是 , 这种方法在表中已存在很多数据的情况下不太合适 。例如表中已有九千万条数据,而此时需要追加插入一千万条数据,实际导入数据节省的时间将会被重新创建一亿条数据的索引所消耗殆?。?这是我们不希望得到的结果 。但是 , 如果要导入数据的表是空的或导入的数据量比已有的数据量要大得多,那么导入数据节省的时间将会少量用于重新创建索引,这时该方法才可以考虑使用 。加快索引创建是另一个需要考虑的问题 。为了减少索引创建中排序的工作时间 , 可以在当前会话中增加 SORT_AREA_SIZE 参数的大?。貌问市淼鼻盎峄霸谀诖娴乃饕唇ü讨兄葱懈嗟呐判虿僮?。同样还可以使用 NOLOGGING 关键字来减少因创建索引而生成的 REDO 日志量,NOLOGGING 关键字会对数据库的恢复和 Standby 备用数据库产生明显的影响,所以在使用之前要仔细斟酌 , 到底是速度优先还是稳定优先 。
运用这种方法,先删除 CALLS 表的主键和不唯一的索引 , 然后逐条导入数据,完成后重新创建索引( 表在导入数据前是空的) 。该方法总共消耗 130 秒,包括重建索引的时间 , 其中导入进程占用 CPU 时间为 35秒 。
这种方法的优点是可以加快导入的速度并使索引更加紧凑有效;缺点是缺乏通用性,当你对表增加新的复杂的模式元素(索引、外键等)时你需要添加代码、修改导入执行程序 。另外针对 7*24 在线要求的数据库在线导入操作时,删除表的索引会对在线用户的查询有很大的性能影响,同时也要考虑 , 主要或唯一的关键约束条件的删除或失效可能会影响到引用它们的外键的使用 。
批量插入,表暂无索引
在Oracle V6 中 OCI 编程接口加入了数组接口特性 。数组操作允许导入程序读取外部文件数据并解析后,向数据库提交SQL语句 , 批量插入 SQL 语句检索出的数据 。Oracle 仅需要执行一次 SQL 语句,然后在内存中批量解析提供的数据 。批量导入操作比逐行插入重复操作更有效率,这是因为只需一次解析 SQL 语句,一些数据绑订操作以及程序与数据库之间来回的操作都显著减少,而且数据库对每一条数据的操作都是重复可知的,这给数据库提供了优化执行的可能 。其优点是数据导入的总体时间明显减少,特别是进程占用 CPU 的时间 。
需要提醒的是 , 通过 OCI 接口确实可以执行数据批量导入操作,但是许多工具和脚本语言却不支持使用此功能 。如果要使用该方法,需要研究你所使用的开发工具是否支持 OCI 批量操作功能 。导入程序需要进行复杂的编码并可能存在错误的风险 , 缺乏一定的弹性 。
运用上述方法,程序将外部数据提取到内存中的数组里,并执行批量插入操作(100行/次) , 保留了表的删除/重建索引操作,总的导入时间下降到 14 秒,而进程占用 CPU 的时间下降到7秒 , 可见实际导入数据所花费的时间显著下降了 95% 。
如何提高ORACLE数据库的查询统计速度 大型数据库系统中往往要用到查询统计 但是对于数据量大的系统 用户在进行复杂的查询统计时往往感到速度很慢 不能满足应用要求 这就要求我们在设计数据库系统时进行合理设置 提高查询统计的速度 本文结合笔者的项目开发经验 阐述具体的设置方法
以oracle 数据库系统为例 我们在开发大型oracle数据库系统时结合项目的特点 本着安全 高效的原则对数据库进行了一些物理设计 从而大大提高了数据库的查询统计速度 总结为如下几点
)扩大数据表空间到 M 用于存放本系统的数据;
)段盘区的初始大小为 K 增长大小为 K 增长幅度为 ;
)用户临时空间增大 M;
)系统临时表空间和回滚段表空间增大 M 并且新建 个回滚段;
)需要经常联结查询 而且数据量又大的库存表 名录表 收发料表放在一簇内;
)提供定时备份 备份文件放在另外的机器上
设置数据表空间的SQL语句如下
CREATE TABLESPACE WXGL_DATADATAFILEWXGL_DATA ORASIZEM ONLINE;
增加系统临时表空间和回滚段表空间的SQL语句如下
ALTER TABLESPACE TEMPORARY_DATA ADD DATAFILETMP ORCL ORASIZEM; ALTER TABLESPACE ROLLBACK_DATA ADD DATAFILERBS ORCL ORASIZEM;
将数据空间设置在指定的数据文件的SQL语句如下
CREATE USER ZBGL IDENTIFIED BY ZBGL; GRANT DBA TO ZBGL; ALTER USER ZBGL DEFAULT TABLESPACE WXGL_DATATEMPORARY TABLESPACE TEMPORARY_DATA;设置五个回滚段的SQL语句如下 SELECT SEGMENT_NAME FROM DBA_ROLLBACK_SEGS WHERE INITIAL_EXTENTAND UPPPER(OWNER) =PUBLIC ; SELECT UPPER(STATUS) FROM DBA_ROLLBACK_SEGS WHERE UPPER(SEGMENT_NAME) =ALTER ROLLBACK SEGMENT RBOFFLINE; ALTER ROLLBACK SEGMENT RBOFFLINE; ALTER ROLLBACK SEGMENT RBOFFLINE; ALTER ROLLBACK SEGMENT RBOFFLINE; ALTER ROLLBACK SEGMENT RBOFFLINE; DROP ROLLBACK SEGMENT RB ; DROP ROLLBACK SEGMENT RB ;
DROP ROLLBACK SEGMENT RB ; DROP ROLLBACK SEGMENT RB ; DROP ROLLBACK SEGMENT RB ; CREATE PUBLIC ROLLBACK SEGMENT RBTABLESPACE ROLLBACK_DATA STORAGE (INITIALNEXTMAXEXTENTS); CREATE PUBLIC ROLLBACK SEGMENT RBTABLESPACE ROLLBACK_DATA STORAGE (INITIALNEXTMAXEXTENTS); CREATE PUBLIC ROLLBACK SEGMENT RBTABLESPACE ROLLBACK_DATA STORAGE (INITIALNEXTMAXEXTENTS); CREATE PUBLIC ROLLBACK SEGMENT RBTABLESPACE ROLLBACK_DATA STORAGE (INITIALNEXTMAXEXTENTS); CREATE PUBLIC ROLLBACK SEGMENT RBTABLESPACE ROLLBACK_DATA STORAGE (INITIALNEXTMAXEXTENTS); ALTER ROLLBACK SEGMENT RBONLINE; ALTER ROLLBACK SEGMENT RBONLINE; ALTER ROLLBACK SEGMENT RBONLINE; ALTER ROLLBACK SEGMENT RBONLINE; ALTER ROLLBACK SEGMENT RBONLINE; MIT;
将数据量大的库存表等放在一簇内的SQL语句如下
lishixinzhi/Article/program/Oracle/201311/18984
【oracle如何查询很快 oracle快速查询】oracle如何查询很快的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于oracle快速查询、oracle如何查询很快的信息别忘了在本站进行查找喔 。
推荐阅读
- word如何删掉空白页,word多出来一页空白页删不掉
- oracle堆积表,oracle堆栈
- 什么是cpu芯片组型号,cpu芯片是指什么
- chatgpt批量调整文档格式,如何批量修改dat文件中的数据?
- 统计数量命令linux linux统计条数
- 苹果iOS.,苹果ios下载安装
- 怎么java虚拟机启动,java虚拟机启动器无法打开怎么办
- 快手直播创意文案互动方式,快手直播宣传语言
- python中类的函数 python类型函数