请问又谁知道全文索引具体的作用.

lihongdian 2009-07-18 10:44:50
Contain 建立是全文索引
like 是匹配表达式

请问这2个有什么区别?还有填充是什么意思?有谁知道原理?请说说,为什么给数据库建立全文索引查询要快一些呢?
...全文
470 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
--小F-- 2009-07-18
  • 打赏
  • 举报
回复
LIKE
确定给定的字符串是否与指定的模式匹配。模式可以包含常规字符和通配符字符。模式匹配过程中,常规字符必须与字符串中指定的字符完全匹配。然而,可使用字符串的任意片段匹配通配符。与使用 = 和 != 字符串比较运算符相比,使用通配符可使 LIKE 运算符更加灵活。如果任何参数都不属于字符串数据类型,Microsoft® SQL Server™ 会将其转换成字符串数据类型(如果可能)。

语法
match_expression [ NOT ] LIKE pattern [ ESCAPE escape_character ]

参数
match_expression

任何字符串数据类型的有效 SQL Server 表达式。

pattern

match_expression 中的搜索模式,可以包含下列有效 SQL Server 通配符。

通配符 描述 示例
% 包含零个或更多字符的任意字符串。 WHERE title LIKE '%computer%' 将查找处于书名任意位置的包含单词 computer 的所有书名。
_(下划线) 任何单个字符。 WHERE au_fname LIKE '_ean' 将查找以 ean 结尾的所有 4 个字母的名字(Dean、Sean 等)。
[ ] 指定范围 ([a-f]) 或集合 ([abcdef]) 中的任何单个字符。 WHERE au_lname LIKE '[C-P]arsen' 将查找以arsen 结尾且以介于 C 与 P 之间的任何单个字符开始的作者姓氏,例如,Carsen、Larsen、Karsen 等。
[^] 不属于指定范围 ([a-f]) 或集合 ([abcdef]) 的任何单个字符。 WHERE au_lname LIKE 'de[^l]%' 将查找以 de 开始且其后的字母不为 l 的所有作者的姓氏。


escape_character

字符串数据类型分类中的所有数据类型的任何有效 SQL Server 表达式。escape_character 没有默认值,且必须仅包含一个字符。

结果类型
Boolean

结果值
如果 match_expression 匹配指定模式,LIKE 将返回 TRUE。

--小F-- 2009-07-18
  • 打赏
  • 举报
回复
全文索引技术是目前搜索引擎的关键技术。
  试想在1M大小的文件中搜索一个词,可能需要几秒,在100M的文件中可能需要几十秒,如果在更大的文件中搜索那么就需要更大的系统开销,这样的开销是不现实的。
  所以在这样的矛盾下出现了全文索引技术,有时候有人叫倒排文档技术。
  原理是先定义一个词库,然后在文章中查找每个词条(term)出现的频率和位置,把这样的频率和位置信息按照词库的顺序归纳,这样就相当于对文件建立了一个以词库为目录的索引,这样查找某个词的时候就能很快的定位到该词出现的位置。
  问题在处理英文文档的时候显然这样的方式是非常好的,因为英文自然的被空格分成若干词,只要我们有足够大的词汇库就能很好的处理。但是亚洲文字因为没有空格作为断词标志,所以就很难判断一个词,而且人们使用的词汇在不断的变化,而维护一个可扩展的词汇库的成本是很高的,所以问题出现了。
  解决出现这样的问题使“分词”成为全文索引的关键技术。目前有两中基本的方法:
  二元法 它把所有有可能的每两两汉字的组合看为一个词组,这样就没有维护词库的开销。
  词库法 它使使用词库中的词作为切分的标准,这样也出现了词库跟不上词汇发展的问题,除非你维护词库。
  实际上现在很多著名的搜索引擎都使用了多种分词的办法,比如“正向最大匹配”+“逆向最大匹配”,基于统计学的新词识别,自动维护词库等技术,但是显然这样的技术还没有作到完美。
  目前全文索引技术正走向人工智能化,也是发展的方向。
ChinaJiaBing 2009-07-18
  • 打赏
  • 举报
回复
在一个产品介绍网站中查询产品时,由于产品的介绍性文字可能会很长,如果使用对产品介绍字段使用like进行模糊查询,性能肯定会是问题。

那么如何解决这个问题呢?第一个想法就是使用全文索引。

那么全文索引是什么、应该如何应用、在应用的过程中又应该注意哪些事情呢?



1、是什么全文索引

[摘录自SQL Server2000联机从书]

全文索引为在字符串数据中进行复杂的词搜索提供有效支持。全文索引存储关于重要词和这些词在特定列中的位置的信息。

全文查询利用这些信息,可快速搜索包含具体某个词或一组词的行。

全文索引包含在全文目录中。每个数据库可以包含一个或多个全文目录。一个目录不能属于多个数据库,而每个目录可以包含一个或多个表的全文索引。

一个表只能有一个全文索引,因此每个有全文索引的表只属于一个全文目录。

全文目录和索引不存储在它们所属的数据库中。目录和索引由 Microsoft 搜索服务分开管理。

全文索引必须在基表上定义,而不能在视图、系统表或临时表上定义。



依据上面的描述,可以做这样一个比喻。大家大概都见过档案柜,档案柜是将各种档案按照分类登记在档案索引卡上,这个档案柜中的就象建立的全文索引,

通过这些档案索引卡可以迅速定位你要查找的卷宗所在的位置。如果不建立这些索引卡,如果卷宗数量不多还好,一旦档案数量很多的时候显然很难找到期望的卷宗,




全文索引和普通索引的区别:

***普通SQL索引***

存储时受定义它们所在的数据库的控制

每个表允许有若干个普通索引

当对作为其基础的数据进行插入、

更新或删除时,它们会自动更新

将数据添加到全文索引称为填充,

全文索引可通过调度或特定请求来请求,

也可以在添加新数据时自动发生不分组

使用SQL Server企业管理器、

向导或Transact-SQL语句创建和除去



***全文索引***

存储在文件系统中,但通过数据库管理

每个表只允许有一个全文索引

在同一个数据库内分组为一个或多个全文目录

lihan6415151528 2009-07-18
  • 打赏
  • 举报
回复

[摘录自SQL Server2000联机从书]

全文索引为在字符串数据中进行复杂的词搜索提供有效支持。全文索引存储关于重要词和这些词在特定列中的位置的信息。

全文查询利用这些信息,可快速搜索包含具体某个词或一组词的行。

全文索引包含在全文目录中。每个数据库可以包含一个或多个全文目录。一个目录不能属于多个数据库,而每个目录可以包含一个或多个表的全文索引。

一个表只能有一个全文索引,因此每个有全文索引的表只属于一个全文目录。

全文目录和索引不存储在它们所属的数据库中。目录和索引由 Microsoft 搜索服务分开管理。

全文索引必须在基表上定义,而不能在视图、系统表或临时表上定义。



依据上面的描述,可以做这样一个比喻。大家大概都见过档案柜,档案柜是将各种档案按照分类登记在档案索引卡上,这个档案柜中的就象建立的全文索引,

通过这些档案索引卡可以迅速定位你要查找的卷宗所在的位置。如果不建立这些索引卡,如果卷宗数量不多还好,一旦档案数量很多的时候显然很难找到期望的卷宗,

这就类似使用LIKE的情形。



全文索引和普通索引的区别:

***普通SQL索引***

存储时受定义它们所在的数据库的控制

每个表允许有若干个普通索引

当对作为其基础的数据进行插入、

更新或删除时,它们会自动更新

将数据添加到全文索引称为填充,

全文索引可通过调度或特定请求来请求,

也可以在添加新数据时自动发生不分组

使用SQL Server企业管理器、

向导或Transact-SQL语句创建和除去



***全文索引***

存储在文件系统中,但通过数据库管理

每个表只允许有一个全文索引

在同一个数据库内分组为一个或多个全文目录



34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧