Oracle单表千万数据量的模糊查询(地名地址查询)

	首先说下需求:
		项目要求对接公安的地名地址的数据库,难点有3个吧
		1.公安的地名地址的数据库为Oracle的,我们项目用的是postgre
		2.给我们的数据文件是dmp的文件,1200W的数据量就有8G,全量导入和增量更新都是个问题
		3.文件导入后我们还需要在这1200W的数据中对某一个字段进行模糊查询
		下面进入正题:
			dmp导入oracle的过程我就不写在这里了,可以关注我的另外一篇帖子,今天这篇帖子只针对oracle,
	mysql的同理可得,都是针对索引进行优化,Oracle单表最大数据量支持到5000W,mysql的单表数据库能到1000w,
	如果单表数据量没有达到这个效果,其实是不需要进行分库分表的操作的。
		针对查询,提高查询效率的最直接有效的方法还是索引。普通的查询我们用普通索引或者是联合索引就能解决
问题了,很多时候需要根据key words关键字去匹配对应的值,对于大量的数据而已,如果使用like,或者instr函数,
速度则会很慢,这个时候,全文检索对比其他的模糊查询,有着明显的速度优势。但是因为分词,所以会占用的一定的空间。
如果空间足够以及对速度有一样的需求,可以考虑全文检索。根据自身的需求而定。
------------------这种查询可想而知,在这里我已经给DZ字段加上索引了,索引失效-----------------
select * from yourtable WHERE ADDRESS like '%苏州中心%' AND  ROWNUM <= 100;
下面我们开始给这张表加上全文索引
------------------1.查看用户-----------------
select * from dba_users WHERE username='CTXSYS';
------------------2.查看角色-----------------
select * from dba_roles WHERE ROLE = 'CTXAPP';
------------------3.解锁-----------------
ALTER USER CTXSYS ACCOUNT UNLOCK;
------------------4.给你的账号授权-----------------
GRANT CTXAPP TO szrkk1;
------------------5.创建文本解析器(这里我的这个字段是中文搜索,所以是这个解析器)-----------------
BEGIN
  ctx_ddl.create_preference ('my_lexer', 'chinese_vgram_lexer');
END;
------------------6.创建全文索引-----------------
CREATE INDEX  ind_dz ON yourtable(ADDRESS) indextype is ctxsys.context  parameters('lexer my_lexer');
------------------7.索引同步维护-----------------
BEGIN
    ctx_ddl.sync_index('ind_dz');
    ctx_ddl.optimize_index('ind_dz','full');
END;
------------------7.测试查询结果0.06s,就是这么快-----------------
select * from yourtable where contains(DZ,'中学')>0 AND ROWNUM <= 100;
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值