Microsoft SQL Server 2000 全文索引和性能问题

关于全文检索,想必大家都不会陌生,帮助文档的搜索功能以及CSDN论坛的搜索功能,在你输入需要查找的关键字之后,程序将返回包含这些关键字的一个线索列表。全文检索最先引入到Windows系统中是用在IIS上面,之后Windows 操作系统提供了搜索服务组件(Microsoft SearchService)。到了 SQL Server7.0,数据库开始集成全文检索,这是通过Windows 操作系统的搜索服务来实现的。

SQL Server2000 的全文检索功能实际上包含两个基本的组件:全文索引器和四个Transact-SQL操作。全文索引器让你创建和填充全文目录,而全文目录是保存在SQL外部,被Microsoft 搜索服务维护和管理。四个Transact-SQL 操作的全文检索分别是C O N T A I N S F R E E T E X T CONTAINSTABLE FREETEXTTABLE。前面两个用在WHERE 语句中,后面两个是行集功能,用在FROM语句中,这些操作允许你查询你的全文目录。当进行全文检索的时候,查询词传递给Microsoft搜索服务,后者遍历全文索引,并向SQL Server返回键值(key)和排位值(rank)。键指的是数据行作为全文索引的唯一字段;排位是指一个数据行匹配检索条件的程度,它的值从0 到1000。

全文索引器

SQL Server 2000允许你创建Microsoft搜索服务支持的全文索引器。SQL Server抽取每一行数据,并把它们传递给Microsoft搜索服务,搜索服务采用一种断词(word-break)算法,把数据分解成一个个单词,同时对单词进行分组,并把它们连同某些信息(如表位置、字段位置等)写到全文索引目录中。你可以把全文索引器看成类似于SQL Server索引器,它们组织你的数据,所以你可以很快地找到信息。但是全文索引器和SQL Server 中的索引器是不同的,如果你想知道有哪些不同,请看下面的表:

设置全文检索设置全文检索的第一个步骤就是允许数据库全文检索,通过在查询分析其执行过程:

EXEC sp_fulltext_database ‘enable’sp_fulltext_database

存储过程的参数是一个开关,可取的值是:’enable’ 和’disable’,前一个值对当前的数据库进行全文索引的初始化,后一个值将在文件系统中删除全文索引的目录。这个存储过程只需要运行一次。注意:你必须确定你已经USE 了需要全文索引的数据库。

第二个步骤就是在操作系统中创建目录来保存全文索引器。一个目录可以包含一个或多个表的索引器,同时目录被看作是一个维护的单元。一个数据库可以只有一个目录,但是如果一个有着100 多万条记录的表有它自己的目录,可能更好一些。创建全文目录的执行的存储过程是:

EXEC sp_fulltext_catalog ‘Forums_data’ ‘create’sp_fulltext_catalog

存储过程创建和删除一个全文目录,该存储过程包含三个参数,第一个参数是全文目录名称,每个数据库的全文目录名称必须是唯一的,这里是 Forums_data,第二个参数是动作,create表示创建,如果是删除,这个参数是’drop’,’stop’停止这个全文检索,’rebuild’删除已有的目录,重新创建一个新的目录。其他两个是’start_full’和’start_incremental’,我们后面在介绍这两个动作。第三个参数是指定全文目录保存的全路径,缺省的目录是SQL Server实例安装目录下的ftdata子目录,如:C:/Program Files/Microsoft SQL Server/MSSQL$/Ftdata。指定的根目录必须是你安装SQL Server 实例所在的机器,并且必须保证至少有50M 的空闲空间。如果空间不足50M,你会得到一个错误。

注:这个存储过程在新的SQL Server 中会被取消,取而代之的将是相应的数据定义语言(DDL)。

第三个步骤是指定全文检索的数据表,以及使用的全文目录和指定作为全文索引的字段。全文索引的字段必须是唯一的。我们使用下面的存储过程:

E X E C sp_fulltext_table ‘Forums_Topics ’ ‘Forums_data ’‘PK_Forums_Topics’

第四个步骤是创建全文索引,前面提到一个数据表只能有一个全文索引,但这个索引可以包含任何数量的列。列必须是基于字符或者image类型:char varchar ncharnvarchar text image 或者ntext。列可以是不同的数据类型,例如:可以是一个char 列和一个text 列。使用存储过程,每个列必须单独添加:

EXEC sp_fulltext_column ‘Forums_Topics’ ‘TopicKey’ ‘add’

EXEC sp_fulltext_column ‘Forums_Topics’ ‘Subject’ ‘add’ 0x0804

EXEC sp_fulltext_column ‘Forums_Topics’ ‘Message’ ‘add’ 0x0804

sp_fulltext_column

存储过程有五个参数,它们分别是:

表名、列名、动作、语言、列数据类型。后面两个参数是可选的,但是如果列的数据类型是image,最后一个列数据类型参数只用于image类型的列。动作参数有’add’ (添加列),’drop’(删除列)两个值。语言参数:如果你没有指定语言参数,那么默认的语言被使用,这里的0x0804代表简体中文的local ID,0 表示使用中立的语言。有关语言的local ID 参见在线丛书。至此,我们的设置过程全部完成。

全文索引的维护

一旦你设置好全文检索,你需要自己来维护全文索引的更新工作,这是因为全文目录的更新不是自动进行的。设置全文检索的第二个步骤创建全文索引的过程,称为全文索引的填充,维护全文索引则称为重填充。全文索引的完全填充(Full Population)第一次创建全文索引时,所进行的索引填充是完全填充。在完全填充中,SQL Server 从数据表的每一行抽取数据,并传递给Microsoft 搜索服务,搜索服务使用断词算法对数据进行断词,为每一个词生成索引,并将索引保存到

全文目录。进行全文索引的完全填充使用前面提到的存储过程sp_fulltext_catalog,动作参数为’full_start’: EXEC sp_fulltext_catalog ‘Forums_data’ ‘full_start’

除了完全填充,更新全文索引还有增量填充和更改跟踪填充。

全文索引的增量填充

全文索引的完全填充对于一个大数据表,需要花费几分钟甚至几个小时的时间。如果表中的数据经常变化,这是必须的,但是对于那些变化并不经常的数据来说,增量填充应该是更好的选择。增量填充只是对上一次填充之后发生变化的数据重新生成新的索引,不过如果增量填充需要数据表必须有一个时间戳字段,否则它将转换为完全填充。增量填充的动作参数是’start_incremental’这也是通过

sp_fulltext_catalog 存储过程来进行的:

EXEC sp_fulltext_catalog ‘Forums_data’ ‘start_incremental’

我们说过全文的索引并不会自动进行,你可以使用SQL Server的Agent 制定一个更新的计划,定时对索引做增量填充。

更改跟踪填充

与完全填充和增量填充不同,更改跟踪填充不是目录级的而是数据表级的填充。通过下面的存储过程来启动更改跟踪填充:

EXEC sp_fulltext_table ‘Forums_Topics’ ‘start_change_tracking’

启动更改跟踪填充之后,我们有两种方法来实现更改跟踪填充:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值