`
楚若之夜
  • 浏览: 124684 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

oracle模糊查询效率提高

 
阅读更多

分2种思路考虑模糊查询的效率的提高。--注:专注处理百万级数据量,小量数据就算了

第一种:把数据存到业务内存中,通过查询内存提高效率。(要求:硬件内存要高)

1,如果想实现内存动态数据,可以监控表数据变化更新内存。

 

第二种:提高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、有人说了用全文索引,我看了,步骤挺麻烦,但是是个不错的方法,留着备用:

http://sandish.itpub.net/post/4899/464369

对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的办法定期重建索引。

 

参考资料:
1,http://blog.csdn.net/yurenjia/archive/2007/04/08/1556306.aspx
2,http://topic.csdn.net/u/20080117/23/34004f4a-4989-47ef-8764-0b7e3bf737a7.html
3,http://tenwe.com/tech/database/oracle/200702/content_561_4.shtml
4,http://www.knowsky.com/389357.html
5,http://yangtingkun.itpub.net/post/468/195520
6,http://bbs.zdnet.com.cn/archiver/tid-120474.html
7,http://bbs.51cto.com/archiver/tid-26270.html
8,http://oracle.chinaitlab.com/exploiture/720104_3.html
9,http://www.33kuai.cn/html/shujuku/20080126/5314_2.html
10,http://www.xrss.cn/Dev/DataBase/20084218963.Html

 
 
 
 
 
分享到:
评论

相关推荐

    提高Oracle数据库查询效率

    在Oracle数据库管理与优化领域,提高查询效率是至关重要的一个环节。这不仅能够显著提升应用程序的性能,还能减少数据库服务器的负载,从而为用户提供更流畅的服务体验。本文将结合提供的SQL示例,深入探讨如何通过...

    oracle 性能优化 加快查询效率

    - **连接顺序的影响**:Oracle按照从右到左的顺序处理FROM子句中的表名,因此,选择记录数最少的表作为基础表可以显著提高查询效率。 - **条件排序**:在WHERE子句中,应先放置那些可以过滤掉最大数量记录的条件,...

    合理创建和使用索引 提高Oracle查询效率.pdf

    它可以大大提高查询效率,减少I/O操作。索引可以是B+树索引、簇索引、散列簇索引、反序索引、位图索引和函数索引等多种类型。 B+树索引是Oracle中最常用的索引类型。它的特点是所有叶节点都具有相同的深度,因此...

    Nhibernate的模糊查询

    如果可能,应在被查询的字段上创建全文索引或前缀索引,以提高查询效率。 2. **避免全模糊查询** 全模糊查询(如`'%关键词%'`)很难利用到索引,应尽量避免。如果必须使用,考虑使用全文搜索引擎如Lucene.NET或...

    oracle_11gR2_08 分组查询GROUP BY,模糊查询LIKE

    在Oracle 11g Release 2数据库管理系统中,掌握分组查询GROUP BY、模糊查询LIKE、连接查询...以上知识点覆盖了Oracle数据库中一些基本但非常实用的数据查询技巧,熟练掌握它们将极大地提高数据处理效率和数据分析能力。

    模糊查询的例子

    使用索引、限制返回结果的数量以及优化查询结构都是提高查询效率的重要策略。 9. **调试与测试**:在实际应用中,对模糊查询语句进行充分的测试至关重要,以确保它们能够正确处理各种输入并返回预期的结果。 通过...

    Oracle中Like与Instr模糊查询性能大比拼

    为了提高查询效率,可以考虑在字段上创建非唯一性索引。例如,对于`name`字段,可以创建`idx_tb_name`索引,然后使用`INSTR(name, 'XX') > 0`进行查询。这种方式在大数据量下能显著提升查询速度,但要注意索引会增加...

    oracle 同音字查询

    对于大量数据,可以预先进行同音字转换并存储结果,这样在查询时直接匹配预处理后的结果,提高查询效率。 在实际应用中,选择哪种方法取决于具体需求,如数据量、查询性能、复杂性和成本等因素。在导入提供的...

    Delphi数据库模糊查询功能的改进

    本篇文章将深入探讨如何改进Delphi数据库的模糊查询功能,以提高查询效率和用户体验。 首先,我们需要理解Delphi中的数据库接口,如ADO(ActiveX Data Objects)、BDE(Borland Database Engine)或FireDAC。这些...

    Oracle查询性能优化

    为了提高查询效率,应确保表之间的连接条件写在其他WHERE条件之前,并且应该将能够过滤掉最多记录的条件放在WHERE子句的末尾。例如,“主键ID=?”这样的条件通常能够过滤掉大量无关记录,因此应将其放在WHERE子句的...

    oracle查询优化

    - **使用DATE_FORMAT**:对于日期字段的操作,可以使用`nls_date_format`等函数来格式化日期,以提高查询效率。 #### 六、注意细节 - **避免不必要的转换**:在查询中尽量避免对数据类型的转换,因为这可能导致索引...

    Stringbuffer JDBC 模糊查询

    在性能优化方面,如果需要对大量数据进行模糊查询,可以考虑使用索引、分页查询以及数据库特有的优化技术,以提高查询效率。同时,合理使用`StringBuffer`能有效减少内存分配,提升程序性能。 总结来说,`...

    Oracle数据库基本查询知识

    索引是提高查询性能的关键工具,它创建了一个指向表中数据的快速查找结构。Oracle支持B树索引、位图索引、函数索引等多种类型的索引。创建索引的语法如下: ```sql CREATE INDEX index_name ON table_name (column_...

    oracle遍历数据库查找字符串

    5. **性能优化**:可能使用了Oracle的索引或者优化策略来提高搜索速度,例如,对包含全文索引的列进行优先搜索。 配合"readme.txt"文件,用户可以获得关于如何使用该工具的详细指南,包括安装JRE、运行程序的命令行...

    处理百万级以上的数据提高查询速度的方法

    在处理大量数据时,如何优化SQL查询以提高查询效率是一项至关重要的技能。以下是从标题、描述、标签以及部分内容中提炼出的关键知识点,这些技巧可以帮助你在面对海量数据时提升SQL查询的速度。 #### 1. 避免使用 `...

    ssh实现模糊查询,分页及增删改查功能

    开发者可以通过Spring的IoC和AOP特性,以及Hibernate的ORM能力,有效提高开发效率和代码质量。在实际项目中,还需要关注性能优化、事务管理、安全性等方面的问题,以确保系统的稳定和高效运行。

    ORACLE SQL语句执行效率研究.pdf

    在《ORACLE SQL语句执行效率研究》这篇文章中,作者魏彬深入分析了影响SQL语句执行效率的各种因素,并探讨了提高查询效率的方法。 首先,作者在绪论中提到,随着数据量的增长,SQL语句的效率问题已经成为衡量系统...

    处理百万级以上的数据查询提高效率的办法

    这样可以确保使用索引进行查找,提高查询效率。 #### 2. 避免在 `WHERE` 子句中使用函数 在 `WHERE` 子句中对字段应用函数会阻止使用索引。例如: - **错误做法**: ```sql SELECT id FROM t WHERE num IS NULL...

    OperaMasks查询、模糊查询、源码

    数据库设计应该包括了用于存储查询数据的表,以及与之相关的索引,以提高查询效率。模糊查询可能利用了全文索引或者带有通配符的WHERE子句。 **使用帮助** 项目中提到的“使用帮助”可能包括了如何使用OperaMasks...

    影响sql语句查询效率的因素

    在WHERE子句中使用精确的值比较,例如`=`运算符,可以显著提高查询性能。相反,使用`<>`(不等于)或范围比较(如`、`>`)可能导致全表扫描,特别是在没有适当索引的情况下。例如,下面的查询可能效率较低: ```sql...

Global site tag (gtag.js) - Google Analytics