重庆分公司,新征程启航

为企业提供网站建设、域名注册、服务器等服务

oracle怎么查询速度快,oracle查询效率

oracle 数据库表数据量比较大,如何提升查询速度?

数据表百万级的数据量,其实还是不是很大的,建立合理的索引就可以解决了。建立分区表的话,是可以根据所分区的内容进行查询的,比如单独查询2011年度的记录,但是因为你已经有了一定的历史数据,所以相对比较麻烦,建议百度一下。另外也可以将数据导出,然后重新建立需要分区的表,在建表的同时进行分区,这样再单独把数据导入就自动分区了

成都创新互联公司主营大足网站建设的网络公司,主营网站建设方案,重庆APP开发公司,大足h5微信小程序开发搭建,大足网站营销推广欢迎大足等地区企业咨询

如何提高oracle的查询速度

使用索引,使用精确定位条件筛选,使用子查询将数据量大的表筛选再进行多表连接查询,少使用模糊查询,注意条件的顺序等

如何提高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, 'SYSDATE + 1');

commit;

END;

其中, 第一个job的SYSDATE + (1/24/4)是指每隔15分钟同步一次,第二个job的SYSDATE + 1是每隔1天做一次全优化。具体的时间间隔,可以根据应用的需要而定。

6,索引重建

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

重建索引语法如下:

ALTER INDEX INX_CUSTOMINFO_ADDR_DOCS REBUILD;

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

Oracle 的全文检索建立和维护索引要比ms sql server都要快得多,笔者的65万记录的一个表建立索引只需要20分钟,同步一次只需要1分钟。

因此,也可以考虑用job的办法定期重建索引。

Oracle等数据库数据量特别大的时候怎样从程序和SQL语句方面优化使查询速度加快

一般最常用的大数据量优化:

1、创建分区表,使查询时的大表尽量分割成小表。Oracle提供范围分区、列表分区、Hash分区以及复合分区,具体选择哪种分区最优,需要根据你的业务数据来确定。

2、创建索引,创建合适的索引可以大大提高查询速度。但是你的这张大表如果会频繁的进行update、insert等操作,索引会导致这些操作变慢。就有可能需要进行动态索引的使用。

3、优化复杂SQL;对复杂的SQL进行合理的优化,这个有时候也需要根据你的数据情况来优化,可以参考一些SQL语句优化方面的文档。

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

1、可以缩小到5张表,因为很多都是从一张表里取出来的数据;

2、不能子查询因为是要显示数据子查询只是查询条件;

3不能建立索引,因为这样会影响表的增删改,它里面都是导入进去的一次增加上千条都有可能;

4、定期结转是什么意思,表示没看懂。时间发的太长的话就算了;

5、定期结转的意思就是,将你要建立视图的几种表数据“转移”到一张新表里面去,不用视图查询。数据库全文检索是RDBMS自带的扩展功能,可以实现高速查询。全文检索建议搜索下关键字,什么lucene之类的就出来了。


文章标题:oracle怎么查询速度快,oracle查询效率
文章URL:http://cqcxhl.cn/article/hogoig.html

其他资讯

在线咨询
服务热线
服务热线:028-86922220
TOP