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

相关文章

Springboot项目启动失败提示找不到dao类的解决

《Springboot项目启动失败提示找不到dao类的解决》SpringBoot启动失败,因ProductServiceImpl未正确注入ProductDao,原因:Dao未注册为Bean,解决:在启... 目录错误描述原因解决方法总结***************************APPLICA编

SpringBoot多环境配置数据读取方式

《SpringBoot多环境配置数据读取方式》SpringBoot通过环境隔离机制,支持properties/yaml/yml多格式配置,结合@Value、Environment和@Configura... 目录一、多环境配置的核心思路二、3种配置文件格式详解2.1 properties格式(传统格式)1.

解决pandas无法读取csv文件数据的问题

《解决pandas无法读取csv文件数据的问题》本文讲述作者用Pandas读取CSV文件时因参数设置不当导致数据错位,通过调整delimiter和on_bad_lines参数最终解决问题,并强调正确参... 目录一、前言二、问题复现1. 问题2. 通过 on_bad_lines=‘warn’ 跳过异常数据3

解决RocketMQ的幂等性问题

《解决RocketMQ的幂等性问题》重复消费因调用链路长、消息发送超时或消费者故障导致,通过生产者消息查询、Redis缓存及消费者唯一主键可以确保幂等性,避免重复处理,本文主要介绍了解决RocketM... 目录造成重复消费的原因解决方法生产者端消费者端代码实现造成重复消费的原因当系统的调用链路比较长的时

解密SQL查询语句执行的过程

《解密SQL查询语句执行的过程》文章讲解了SQL语句的执行流程,涵盖解析、优化、执行三个核心阶段,并介绍执行计划查看方法EXPLAIN,同时提出性能优化技巧如合理使用索引、避免SELECT*、JOIN... 目录1. SQL语句的基本结构2. SQL语句的执行过程3. SQL语句的执行计划4. 常见的性能优

深度解析Nginx日志分析与499状态码问题解决

《深度解析Nginx日志分析与499状态码问题解决》在Web服务器运维和性能优化过程中,Nginx日志是排查问题的重要依据,本文将围绕Nginx日志分析、499状态码的成因、排查方法及解决方案展开讨论... 目录前言1. Nginx日志基础1.1 Nginx日志存放位置1.2 Nginx日志格式2. 499

SpringBoot监控API请求耗时的6中解决解决方案

《SpringBoot监控API请求耗时的6中解决解决方案》本文介绍SpringBoot中记录API请求耗时的6种方案,包括手动埋点、AOP切面、拦截器、Filter、事件监听、Micrometer+... 目录1. 简介2.实战案例2.1 手动记录2.2 自定义AOP记录2.3 拦截器技术2.4 使用Fi

kkFileView启动报错:报错2003端口占用的问题及解决

《kkFileView启动报错:报错2003端口占用的问题及解决》kkFileView启动报错因office组件2003端口未关闭,解决:查杀占用端口的进程,终止Java进程,使用shutdown.s... 目录原因解决总结kkFileViewjavascript启动报错启动office组件失败,请检查of

Linux系统中查询JDK安装目录的几种常用方法

《Linux系统中查询JDK安装目录的几种常用方法》:本文主要介绍Linux系统中查询JDK安装目录的几种常用方法,方法分别是通过update-alternatives、Java命令、环境变量及目... 目录方法 1:通过update-alternatives查询(推荐)方法 2:检查所有已安装的 JDK方

SQL Server安装时候没有中文选项的解决方法

《SQLServer安装时候没有中文选项的解决方法》用户安装SQLServer时界面全英文,无中文选项,通过修改安装设置中的国家或地区为中文中国,重启安装程序后界面恢复中文,解决了问题,对SQLSe... 你是不是在安装SQL Server时候发现安装界面和别人不同,并且无论如何都没有中文选项?这个问题也