2010-11-24 14:55 全文索引是解决海量数据模糊查询的较好解决办法

本文主要是介绍2010-11-24 14:55 全文索引是解决海量数据模糊查询的较好解决办法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

2010-11-24 14:55 全文索引是解决海量数据模糊查询的较好解决办法

2012-12-04 15:09 by swarb, ... 阅读, ... 评论, 收藏, 编辑
全文检索可以对varchar,text,image型字段进行检索,但一个表最多只能建一个全文索引
SQL Server 2000 引入了对存储在 image 列中的这些类型的数据执行全文检索的能力。

如果没有全文索引,对字符的模糊查询只能对基表进行全表扫描(或索引扫描),
执行模糊查询都需要对全表扫描或索引扫描意味着消耗大量IO。
如果模糊查询经常发生,会造成数据库性能恶化。

本篇为简单起见,仅在varchar型字段上图文演示非常完整的而且是高效可行的全文索引
创建及维护过程.
1:
在企业管理器中展开要建立全文索引的数据库,右击“全文目录”,选择“新建全文目录”
如 图1 所示。
可以修改全文目录的路径,通过将全文目录放在单独的磁盘或磁盘阵列可以提高效率。
建议不要对整个全文目录进行任何形式的填充调度。


=================== 图1 ===================


2:
接下来对具体的表添加全文索引。
全文索引不能建立在视图上,只能建立在有唯一索引(主键也是唯一索引)的基础表上。
下图2 演示如何对表建立全文索引。

演示中的 t_fulltext 表的建表及初始化数据的脚本如下:

create table t_fulltext
(
rid int identity(1,1),
title varchar(256) not null,
writetime datetime default(getdate())
)
go
alter table t_fulltext add constraint pk_fulltext primary key ( rid )
go
--初始化数据
insert into t_fulltext(title) values('山东蓬莱河西金矿透水事故2人死亡3人失踪(21:29)')
insert into t_fulltext(title) values('泰国将在广西南宁设立总领事馆(21:10)')
insert into t_fulltext(title) values('河北安徽等12省减免农业税等政策落实到位(20:43)')
insert into t_fulltext(title) values('台湾学者托梦预测陈水扁元旦讲话(20:04)')
insert into t_fulltext(title) values('澳门特首何厚铧发表元旦献辞向市民问候新年(20:02)')
insert into t_fulltext(title) values('南水北调首个建成项目山东段济平干渠通水成功(19:48)')
insert into t_fulltext(title) values('组图:北京110摩托车巡警亮相(18:07)')
insert into t_fulltext(title) values('福建广西发生患者死亡事件 医院责任人被处理(17:33)')
insert into t_fulltext(title) values('北京大容量公交车运营首日遭遇乘客爆满(17:30)')
insert into t_fulltext(title) values('北京公安系统今天全部停休严查五环内放炮(17:30)')
insert into t_fulltext(title) values('研究发现海龙基因酶对禽流感病毒有杀伤作用(17:27)')
insert into t_fulltext(title) values('上海世博会筹办进入实质性操作面临五大挑战(17:03)')
insert into t_fulltext(title) values('台媒体称陈水扁元旦祝词必将老调重弹(15:30)')
insert into t_fulltext(title) values('珠三角咸潮影响范围小于去年(15:12)')
insert into t_fulltext(title) values('上海市民体验轨道交通4号线列车(组图)(14:53)')
insert into t_fulltext(title) values('广州亿元集资诈骗案主犯王日升被判死缓(图)(14:44)')
insert into t_fulltext(title) values(' 评论:取消农业税让民众共享经济增长成果(17:30)')
insert into t_fulltext(title) values('香港媒体谈美国应对中国新策略:合作与防范(15:57)')
insert into t_fulltext(title) values('专访中国地震局局长陈建民:地震是能够预测的(15:56)')
insert into t_fulltext(title) values('评论:野蛮公交莫成城市丑陋形象代言人(13:27)')
insert into t_fulltext(title) values('台媒体称当局与民间企业对立非民众之福(12:50)')





=================== 图2 ===================

3:出现的欢迎界面如 图3



=================== 图3 ===================

4:为全文索引选择唯一索引,如 图4



=================== 图4 ===================

5:选择全文索引的列,注意一张表只能建一个全文索引。建
议不要选择断词的语言,这样实际会使用默认的断词语言。如图5 所示。
通过运行

sp_configure 'default full-text language'

可以查看默认的断词语言,如我的机器上运行上条语句,config_value 值是 2052
它表示简体中文。
其它代码所表示的语言可以查阅Book Online的“default full-text language”关键词。

由于SQL Server对中文断词并不是很高明,因此并不能依靠SQL Server带给您非常智能的搜索,这意味着您的全文搜索结果,可能有不希望出现的记录,或您希望出现的记录没有出现。




=================== 图5 ===================

6:将表指派到全文目录,如 图6 所示,也可以通过此界面创建新目录。



=================== 图6 ===================

7:接下来会提示对表进行填充调度,为能够准实时地把基表的全文索引列的修改(增、删、改)准实时地应用到全文索引,建议使用下面介绍的其它方法进行索引维护。如 图7 所示,建议不要在这里添加任何调度,直接点击“下一步”。

如果数据不会再修改,则在一次完全填充以后,不用再增加其它类型的表级填充。
如果实施到本步骤,不再添加任何形式的表调度,那么基表数据的更新,将不能更新到全文索引。



=================== 图7 ===================

8:如 图8 所示出现的完成界面提示中点击“完成 ”,请稍微等待直到出现下一界面。



=================== 图8 ===================

9:在如 图9 所示的界面中点击“确定”。
由于尚未在表上添加任何调度,因此还需要继续设置。


=================== 图9 ===================

10:在企业管理器中右击 f_fulltext 表,如 图10 所示,选中“更改跟踪”。
选中更改跟踪后,以后对基表数据的修改,才能反映到全文索引中。
特别注意:一旦选中“更改跟踪”,根据经验,其实是必须对该表进行完全填充的。
如果是在线使用的全文索引数据库,选中“更改跟踪”会导致性能迅速下降,导致全文索引
无法使用。

=================== 图10 ===================

11: 在企业管理器中右击 f_fulltext 表,如 图11 所示,选中“更新后台中的索引”。
到本步,全文索引就完全完成了。由于我们选中了“更改跟踪”,此时实际已经开始了表的完全填充。
根据经验,300万条全文索引字段长为 50 的表,需要8到10小时才能完成完全填充。

=================== 图11 ===================

12:可以通过双击全文目录下的全文索引,查看该全文目录的属性,如 图12 所示,状态为“空闲”,而项目计数大于0,则表示完全填充已经完成了。


=================== 图12 ===================

13:如何进行全文索引查询(仅简单介绍)
全文索引查询建议使用 CONTAINS 及 FREETEXT 谓词进行查询。
如果关键词仅包括干扰词(有关干扰词的信息,请参阅Book Online的“干扰词”关键字)

select * from t_fulltext where contains(title,'3')

则会报如下错误

服务器: 消息 7619,级别 16,状态 1,行 1
全文操作运行失败。查询子句只包含被忽略的词。

使用下面的语法,能避免出现错误,且能够确实查询出正确的记录。


select * from t_fulltext where contains(title,'"*3*"')
13 台媒体称陈水扁元旦祝词必将老调重弹(15:30) 2005-12-31 23:17:17.670
10 北京公安系统今天全部停休严查五环内放炮(17:30) 2005-12-31 23:17:17.653
17 评论:取消农业税让民众共享经济增长成果(17:30) 2005-12-31 23:17:17.670
9 北京大容量公交车运营首日遭遇乘客爆满(17:30) 2005-12-31 23:17:17.653
8 福建广西发生患者死亡事件 医院责任人被处理(17:33) 2005-12-31 23:17:17.653
(所影响的行数为 5 行)

全文索引的简单介绍就到这里了,希望能起个抛砖引玉的作用。

这篇关于2010-11-24 14:55 全文索引是解决海量数据模糊查询的较好解决办法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/759190

相关文章

IDEA和GIT关于文件中LF和CRLF问题及解决

《IDEA和GIT关于文件中LF和CRLF问题及解决》文章总结:因IDEA默认使用CRLF换行符导致Shell脚本在Linux运行报错,需在编辑器和Git中统一为LF,通过调整Git的core.aut... 目录问题描述问题思考解决过程总结问题描述项目软件安装shell脚本上git仓库管理,但拉取后,上l

Linux下利用select实现串口数据读取过程

《Linux下利用select实现串口数据读取过程》文章介绍Linux中使用select、poll或epoll实现串口数据读取,通过I/O多路复用机制在数据到达时触发读取,避免持续轮询,示例代码展示设... 目录示例代码(使用select实现)代码解释总结在 linux 系统里,我们可以借助 select、

解决docker目录内存不足扩容处理方案

《解决docker目录内存不足扩容处理方案》文章介绍了Docker存储目录迁移方法:因系统盘空间不足,需将Docker数据迁移到更大磁盘(如/home/docker),通过修改daemon.json配... 目录1、查看服务器所有磁盘的使用情况2、查看docker镜像和容器存储目录的空间大小3、停止dock

idea npm install很慢问题及解决(nodejs)

《ideanpminstall很慢问题及解决(nodejs)》npm安装速度慢可通过配置国内镜像源(如淘宝)、清理缓存及切换工具解决,建议设置全局镜像(npmconfigsetregistryht... 目录idea npm install很慢(nodejs)配置国内镜像源清理缓存总结idea npm in

idea突然报错Malformed \uxxxx encoding问题及解决

《idea突然报错Malformeduxxxxencoding问题及解决》Maven项目在切换Git分支时报错,提示project元素为描述符根元素,解决方法:删除Maven仓库中的resolv... 目www.chinasem.cn录问题解决方式总结问题idea 上的 maven China编程项目突然报错,是

在Ubuntu上打不开GitHub的完整解决方法

《在Ubuntu上打不开GitHub的完整解决方法》当你满心欢喜打开Ubuntu准备推送代码时,突然发现终端里的gitpush卡成狗,浏览器里的GitHub页面直接变成Whoathere!警告页面... 目录一、那些年我们遇到的"红色惊叹号"二、三大症状快速诊断症状1:浏览器直接无法访问症状2:终端操作异常

mybatis直接执行完整sql及踩坑解决

《mybatis直接执行完整sql及踩坑解决》MyBatis可通过select标签执行动态SQL,DQL用ListLinkedHashMap接收结果,DML用int处理,注意防御SQL注入,优先使用#... 目录myBATiFBNZQs直接执行完整sql及踩坑select语句采用count、insert、u

前端导出Excel文件出现乱码或文件损坏问题的解决办法

《前端导出Excel文件出现乱码或文件损坏问题的解决办法》在现代网页应用程序中,前端有时需要与后端进行数据交互,包括下载文件,:本文主要介绍前端导出Excel文件出现乱码或文件损坏问题的解决办法,... 目录1. 检查后端返回的数据格式2. 前端正确处理二进制数据方案 1:直接下载(推荐)方案 2:手动构造

MyBatis Plus大数据量查询慢原因分析及解决

《MyBatisPlus大数据量查询慢原因分析及解决》大数据量查询慢常因全表扫描、分页不当、索引缺失、内存占用高及ORM开销,优化措施包括分页查询、流式读取、SQL优化、批处理、多数据源、结果集二次... 目录大数据量查询慢的常见原因优化方案高级方案配置调优监控与诊断总结大数据量查询慢的常见原因MyBAT

MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决

《MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决》MyBatis默认开启一级缓存,同一事务中循环调用查询方法时会重复使用缓存数据,导致获取的序列主键值均为1,... 目录问题原因解决办法如果是存储过程总结问题myBATis有如下代码获取序列作为主键IdMappe