SQL Server 全文索引查询.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
SQL Server 全文索引查询

SQL Server 全文索引查询T-SQL学习笔记之一(Full-text index)2009-12-11 11:29引言  这段时间为了提高海量字符串数据的查询效率,我对字段添加了全文索引。首先全文索引相对于传统的索引是有区别的,这是因为传统的索引主要是以首字母开始建立的索引,处理like keword%这样的查询会很高效,但是如果查询时不限定首字母,而只是包含某个词,比如like %keyword%这样的查询,实际操作中无法使用传统索引加速查询效率,而只能一项一项比较了。  而全文索引正是提供了“包含”式查询机制,查询一个长字符串中是否包含给定关键词的功能,这无论是在搜索引擎或是网站的搜索平台都是很有用处的。  首先,推荐一本学习SQL Server全文索引的书籍,这本书详细的讲解了全文索引的方方面面,甚至还阐述许多设计搜索引擎的思想和方法。书名是《Pro Full-Text Search in SQL Server 2008》,是Apress出版的。  这本书的内容是按章划分的,同时由浅入深,从一般的技巧到高级的技巧。我这里就简单分享一下基本的全文查询方法,更多高级的技巧应该在实际应用中按需进行学习。  要实现全文查询,首先安装的SQL Server实例要支持全文查询服务,可以查看windows服务是否有全文索引服务。如果没有,则要重新安装SQL Server并选择添加功能,将Full-Text功能选中,然后再安装或升级。    有了全文查询服务,还不能直接进行查询,需要先在想要建立全文索引的字段上建立一个全文索引。方法是打开企业管理器,选择字段所在表格,然后点击右键,选择Full-text inde”,然后选择define Full-text index就能进入设置面板。  需要注意的是,全文索引只能建立在Unique(唯一)字段上,并且每个表最多只能有一个全文索引字段,因此要慎重。然后按照提示建立全文索引即可(可以参见我推荐的那本书,会有一步一步操作的详细说明和注释)  建立好全文索引后,就能够运用T-SQL的全文查询语法进行全文查询了。  主要有两个语法,一个是contains,另一个是freetextContains  contains从字面上就能很好理解,即包含,比如我们在表Sample的一个字段Column里查询包含“世界末日”这个关键词的所有记录,该表一共有60万条记录,传统的查询语法是select * from Sample where [Column] like %世界末日%  我们修改一下查询语言,并记录查询时间,如下declare @d datetimeset @d=getdate()select [Column] as [result] from Sample where [Column] like %世界末日%select [语句执行花费时间(毫秒)]=datediff(ms,@d,getdate())  执行结果如下:下面,我们使用全文查询语法contains,如下select [Column] as [result] from Sample where contains([Column],世界末日)  执行结果如下  我们可以看出,全文索引极大的改变了查询效率,传统查询花费了503毫秒(半秒),而全文索引却不足一毫秒,效率提高了上千倍。由于表记录只有60万,如果记录数更多,几千万甚至上亿,那么全文索引必然会带来更大的效率优势。  当然,效率是需要空间来换取的,全文索引需要开销大量的磁盘空间,所以有时候索引比原数据还大也是正常现象Freetext  freetext在搜索引擎方面具有大量应用,因为它提供了类似于“模糊查询”的机制,他的查询机制是只要含有查询关键词中的某个字符或词语,那么就选中该记录,因此它返回的结果会很多很多,往往我们需要用top语法来限定结果数量。还是查询“世界末日”,这个时候它会返回包含“世”或“界”或“末”或“日”的所有词语,因此结果集往往很大。它的查询语法如下:select [Column] as [result] from Sample where freetext([Column],世界末日)   执行结果如下,一共返回了1820条记录  其实freetext语法和contains语法是一样的,只是执行的方式不一样罢了,contains是精确限定,而freetext是模糊限定,只要出现了关键词中的字,就被选中。freetext的好处就是提供模糊查询,往往用户给出的关键词我们库里没有,那么用contains将无法返回结果,而使用freetext就能返回相关结果,不过由于freetext是即挑即选,没有对结果关于关键词的匹配程度来排序,所以也是一个缺陷,但是我们可以

文档评论(0)

yan698698 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档