网站首页 > 文章中心 > 其它

怎么提高oracle速度_oracle提高查询效率

作者:小编 更新时间:2023-09-11 13:44:08 浏览量:346人看过

如何提高oracle的查询速度

几个简单的步骤大幅提高Oracle性能--我优化数据库的三板斧.

数据库优化的讨论可以说是一个永恒的主题.资深的Oracle优化人员通常会要求提出性能问题的人对数据库做一个statspack,贴出数据库配置等等.还有的人认为要抓出执行最慢的语句来进行优化.但实际情况是,提出疑问的人很可能根本不懂执行计划,更不要说statspack了.而我认为,数据库优化,应该首先从大的方面考虑:网络、服务器硬件配置、操作系统配置、Oracle服务器配置、数据结构组织、然后才是具体的调整.实际上网络、硬件等往往无法决定更换,应用程序一般也无法修改,所以呢应该着重从数据库配置、数据结构上来下手,首先让数据库有一个良好的配置,然后再考虑具体优化某些过慢的语句.我在给我的用户系统进行优化的过程中,总结了一些基本的,简单易行的办法来优化数据库,算是我的三板斧,呵呵.不过请注意,这些不一定普遍使用,甚至有的会有副作用,但是对OLTP系统、基于成本的数据库往往行之有效,不妨试试.(注:附件是Burleson写的用来报告数据库性能等信息的脚本,本文用到)

怎么提高oracle速度_oracle提高查询效率-图1

一.设置合适的SGA

二.分析表和索引,更改优化模式

Oracle默认优化模式是CHOOSE,在这种情况下,如果表没有经过分析,经常导致查询使用全表扫描,而不使用索引.这通常导致磁盘I/O太多,而导致查询很慢.如果没有使用执行计划稳定性,则应该把表和索引都分析一下,这样可能直接会使查询速度大幅提升.分析表命令可以用ANALYZE TABLE 分析索引可以用ANALYZE INDEX命令.对于少于100万的表,可以考虑分析整个表,对于很大的表,可以按百分比来分析,但是百分比不能过低,否则生成的统计信息可能不准确.可以通过DBA_TABLES的LAST_ANALYZED列来查看表是否经过分析或分析时间,索引可以通过DBA_INDEXES的LAST_ANALYZED列.

SQL SET AUTOTRACE ON

SQLSET TIMING ON

通过SET AUTOTRACE ON 来查看语句的执行计划,通过SET TIMING ON 来查看语句运行时间.

SQL seleCT count(*) from CASE_GA_AJZLZ;

COUNT(*)

怎么提高oracle速度_oracle提高查询效率-图2

----------

Execution Plan

0 SELECT STATEMENT Optimizer=CHOOSE

①. 0 SORT (AGGREGATE)

........................

SQL analyze table CASE_GA_AJZLZ compute statistics;

SQL select count(*) from CASE_GA_AJZLZ;

..............................

SQL set pagesize 0

SQL spool d:\analyze_tables.sql;

SQL select 'analyze table '||owner||'.'||table_name||'

compute statistics;' from dba_tables where owner='GAXZUSR';

SQL spool off

SQL spool spool d:\analyze_indexes.sql;

SQL select 'analyze index '||owner||'.'||index_name||'

compute statistics;' from dba_indexes where owner='GAXZUSR';

SQL @d:\analyze_tables.sql

SQL @d:\analyze_indexes.sql

解释:上面的语句生成了两个sql文件,分别分析全部的GAXZUSR的表和索引.如果需要按照百分比来分析表,可以修改一下脚本.通过上面的步骤,我们就完成了对表和索引的分析,可以测试一下速度的改进啦.建议定期运行上面的语句,尤其是数据经过大量更新.

当然,也可以通过dbms_stats来分析表和索引,更方便一些.但是我仍然习惯上面的方法,因为成功与否会直接提示出来.

另外,我们可以将优化模式进行修改.optimizer_mode值可以是RULE、CHOOSE、FIRST_ROWS和ALL_ROWS.对于OLTP系统,可以改成FIRST_ROWS,来要求查询尽快返回结果.这样即使不用分析,在一般情况下也可以提高查询性能.但是表和索引经过分析后有助于找到最合适的执行计划.

三.设置cursor_sharing=FORCE 或SIMILAR

SQL SELECT * FROM MYTABLE WHERE NAME='tom'

SQL SELECT * FROM MYTABLE WHERE NAME='turner'

四.将常用的小表、索引钉在数据缓存KEEP池中

五.设置optimizer_max_permutations

六.调整排序参数

如何提高oracle模糊查询的性能?

①.、使用两边加'%'号的查询,Oracle是不通过索引的,所以查询效率很低.

例如:select count(*) from lui_user_base t where t.user_name like '%cs%';

怎么提高oracle速度_oracle提高查询效率-图3

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()里后,效率就会变的很慢了.

这种查询效果很好,速度很快,推荐使用这种.因为我对oracle内部机制不是很懂,只是对结果做了一个说明.

对cmng_custominfo 表中的address字段做全文检索:

BEGIN

ctx_ddl.create_preference ('SMS_ADDRESS_LEXER', 'CHINESE_LEXER');

--ctx_ddl.create_preference ('my_lexer', 'chinese_vgram_lexer'); 不用

end;

CREATE INDEX INX_CUSTOMINFO_ADDR_DOCS ON cmng_custominfo(address) INDEXTYPE IS CTXSYS.CONTEXT PARAMETERS ('LEXER SMS_ADDRESS_LEXER');

select * from cmng_custominfo where contains (address, '金色新城')1;

同步:根据新增记录的文本内容更新全文搜索的索引.

begin

ctx_ddl.sync_index('INX_CUSTOMINFO_ADDR_DOCS');

优化:根据被删除记录清除全文搜索索引中的垃圾

ctx_ddl.optimize_index('INX_CUSTOMINFO_ADDR_DOCS', 'FAST');

①.)该功能需要利用oracle的JOB功能来完成

重新启动oracle数据库服务和listener服务.

--同步 sync:

variable jobno number;

DBMS_JOB.SUBMIT(:jobno,'ctx_ddl.sync_index(''INX_CUSTOMINFO_ADDR_DOCS'');',

commit;

END;

--优化

DBMS_JOB.SUBMIT(:jobno,'ctx_ddl.optimize_index(''INX_CUSTOMINFO_ADDR_DOCS'',''FULL'');', SYSDATE, 'SYSDATE + 1');

重建索引会删除原来的索引,重新生成索引,需要较长的时间.

重建索引语法如下:

ALTER INDEX INX_CUSTOMINFO_ADDR_DOCS REBUILD;

据网上一些用家的体会,oracle重建索引的速度也是比较快的,有一用家这样描述:

所以呢,也可以考虑用job的办法定期重建索引.

oracle速度变慢,怎样解决

这个 速度慢 是指 使用数据库过程中 查询数据缓慢 还是 数据库运行过程中各项功能缓慢? 如果是查询数据缓慢的话,基本上是因为 与 查询语句逻辑、表结构、执行计划相关,可以根据数据库具体执行计划优化数据库查询,比如 要查询的表没有对应的索引,可以添加索引提高查询速度;或者 要查询的表有过大量的删除与更新,则需要更新表的统计信息以提高查询速度.如果是数据库本身各项功能运行缓慢,那大多是数据库系统各项参数设置不合理,与服务器本身的系统的硬件和系统有关,可以更改数据库相关的系统参数,调整数据库运行所需要的参数以提高数据库运行质量.

如何提高oracle视图的查询速度?

oracle数据库的性能优化有哪些方法?

oracle 对于多个大表关联操作如何优化速度?

①.、首先要建立适当的索引.sql在索引字段不要加函数,保证索引起效.如果是复合索引注意在sql的顺序.如果已经存在索引,建议你先重建索引先,因为大数据表的索引维护到了一个阶段就是乱的,一般建议重建.建立好的一般可以获得几十倍的速度提升.

如果这些都做了还不满意的话,可以考虑建立几个表空间,然后按照一个算法将各个表的数据,平均的放在各个表空间内(分表分区),在select的时候数据库就会使用多线程到各个表空间索引数据,这个一般不是上千万级的表是不用的.

也不是所有人都会用.

以上就是土嘎嘎小编为大家整理的怎么提高oracle速度相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章