加菲猫窝

房价日涨,生活艰难
随笔 - 42, 评论 - 504, 引用 - 61

导航

关于

标签

每月存档

最新留言

广告

 

大家都知道LIKE查询很慢,全文索引就是事先做好相关的索引,表示哪个主题词可以在哪些记录里找到,甚至事先计算好RANK,检索时可以把相关度高的先列出来,这可以大大提高检索的速度。

打个比方,你有很多的小抽屉,每个抽屉里面放一些杂物,假如你要找东西,最原始的方法就是一个个抽屉翻,这就是没有索引的情况。

假如聪明一点,给抽屉编号(唯一键),把哪个号码的抽屉有什么东西记录在纸上,找东西先看看这张纸,这就是普通索引,假如你要知道哪个抽屉有什么,你可以在纸上迅速找到抽屉号码(大家知道这是使用查找树),然后得到相关的信息,这种情况普通索引是很快的;但是要找到一个特定的东西哪些抽屉有,你就要把整张纸遍历一次,这就是LIKE查询,假如你要找哪些抽屉同时有2种甚至更多种物品,LIKE就更加繁琐了。假如一个表有上千万的纪录,大家可以想象查询的代价。

可以换一个思路,另外找张纸,记录一样东西存在于哪些抽屉:

夹子:1,3,4,5,6,9,12...

钱币:2,3,4,7,12...

药丸:1,3,5,6...

这样找到某样东西或者某几样东西都很容易。

全文索引和普通的SQL索引有很多的区别:

普通 SQL 索引 全文索引
存储时受定义它们所在的数据库的控制。 存储在文件系统中,但通过数据库管理。
每个表允许有若干个普通索引。 每个表只允许有一个全文索引。
当对作为其基础的数据进行插入、更新或删除时,它们自动更新。 将数据添加到全文索引称为填充,全文索引可通过调度或特定请求来请求,也可以在添加新数据时自动发生。
不分组。 在同一个数据库内分组为一个或多个全文目录。
使用 SQL Server 企业管理器、向导或 Transact-SQL 语句创建和除去。 使用 SQL Server 企业管理器、向导或存储过程创建、管理和除去。

使用全文索引的话,可以看看下面的帖子(感谢大力和lihonggen0):

???? 如何在sqlserver中建立全文索引:
???? http://www.csdn.net/develop/Read_Article.asp?Id=17137
???
???? 如何使用image字段:
???? http://expert.csdn.net/Expert/topic/1594/1594455.xml

发现大家有一个常问的问题,就是关于以下的信息的:

查询子句只包含被忽略的词

这是因为使用一些很简单的词,比如'是',进行查询的缘故。

提出的解决办法不外乎是把C:\Program Files\Microsoft SQL Server\MSSQL\FTDATA\SQLServer\Config\noise.chs 清空

觉得这种方法是不可取的,大家打开这个文件看看,发现里面是一些这样的词:is,are,be,at,我,是

这些词都是频率很高的词,而且在查询中的意义不大,就好像几乎每个抽屉里面都有纸屑一样,为这些词作索引得不偿失,所以全文引擎把这些词称为干扰词不做索引,个人觉得在应用中过滤这些词然后向用户提出友好的提示更好,而不是使用清空noise.chs粗暴的对待全文引擎。比方大家可以看看在Google中搜索“的”

-------------------------------------------------------------------------

另外谢谢ghj,一个很重要的东西遗漏了,与一般的索引立即更新不同,全文索引一般是定期维护索引的,所以对于频繁更新的数据不合适,需要做全文索引的对象一般都是论文网页之类,还算适合拉!

个人觉得我的数据库没有代表性,所以也不细说:作索引的时候,CPU和内存使用都很高,时间也很长(下面我的数据库是整个晚上),完成以后并不需要使用很多的系统资源,多个全文查询并发的时候也有不小的CPU消耗,但是比LIKE强。

我的系统上数据库是123M,太小,使用全文索引没有感到特别的优势,但是可以想想对于GOOGLE那样的海量数据,使用LIKE是不可想象的:)当然别人也没有使用关系数据库。

打印 | 张贴于 2004-03-19 10:33:00 | Tag:信手涂鸦  多维技术

留言反馈

#SQL Server全文索引的个人总结(上) 编辑
SQL Server全文索引的个人总结(上)
2007-04-17 13:21:00 | [匿名用户:网际浪子]
#回复: SQL Server全文索引的个人总结(上) 编辑
的小圈子 该用户目前没有加入任何小圈子。 cindy 说: hi,谢谢你加我啊,有空常来我家坐坐,别忘了给我留言哦 2006-01-07 12:57 wanwei 说: 嘿嘿 2005-12-28 14:04 朋友圈精灵 说: 打招呼 2005-12-26 02:03 想要给
2007-04-06 15:14:00 | [匿名用户:dfg]
#回复: SQL Server全文索引的个人总结(上) 编辑
rg
2007-04-06 15:12:00 | [匿名用户:dfg]
#回复: SQL Server全文索引的个人总结(上) 编辑
电厂个人年终总结
2007-01-15 10:49:00 | [匿名用户:katherine]
#回复: SQL Server全文索引的个人总结(上) 编辑
电厂个人年度总结写范
2007-01-10 10:01:00 | [匿名用户:XIAOJUN ]
#回复: SQL Server全文索引的个人总结(上) 编辑
电厂个人年度总结写范
2007-01-10 10:00:00 | [匿名用户:XIAOJUN ]
#forums中的全文检索机制 编辑
大家都知道LIKE查询很慢,全文索引就是事先做好相关的索引,表示哪个主题词可以在哪些记录里找到,
甚至事先计算好RANK,检索时可以把相关度高的先列出来,这可以大大提高检索的速度。
2006-09-18 11:31:00 | [匿名用户:cxzhq2002]
#re: SQL Server全文索引的个人总结(上) 编辑
我也是把noise.chs 清空,自己写分词程序来实现搜索的,效果马虎,主要是我的词库不好
2006-08-28 14:14:00 | [匿名用户:第二课堂]
#re: SQL Server全文索引的个人总结(上) 编辑
sqlserver的全文检索与lucene比如何?
2006-06-08 11:34:00 | [匿名用户:sunny]
#re: SQL Server全文索引的个人总结(上) 编辑
dfgzsfghdhdgh
2006-05-08 17:20:00 | [匿名用户:dfgdf]
#re: SQL Server全文索引的个人总结(上) 编辑
这只猫这么厉害~
要是我家的猫也这样就好了
无敌~~~~~~~~
感谢...说的很清楚!
2006-04-29 21:30:00 | [匿名用户:HedgeHog]
#re: SQL Server全文索引的个人总结(上) 编辑
very good!
2006-03-24 01:00:00 | [匿名用户:11nong]
#re: SQL Server全文索引的个人总结(上) 编辑
不错, 试一试
2006-01-23 12:00:00 | [匿名用户:网址大全]
#re: SQL Server全文索引的个人总结(上) 编辑
火电厂个人年终总结
2005-12-13 19:38:00 | [匿名用户:aaa]
#re: SQL Server全文索引的个人总结(上) 编辑
客户主管的年度总结
2005-12-08 15:47:00 | [匿名用户:风风]
#re: SQL Server全文索引的个人总结(上) 编辑
水利工作建设与管理个人总结
2005-12-05 08:37:00 | [匿名用户:崔立帆]
#re: SQL Server全文索引的个人总结(上) 编辑
shfdhshdhhbbh
2005-12-04 17:00:00 | [匿名用户:hgmjgm]
#re: SQL Server全文索引的个人总结(上) 编辑
为什么我的全文检索对数字进行查询,很多时候得不到查询结果,这是为什么呢?请问怎么解决这一问题?
2005-10-17 16:00:00 | [匿名用户:ludy]
#re: SQL Server全文索引的个人总结(上) 编辑
大学生一年的学习生活和思想
2005-09-23 14:56:00 | [匿名用户:啊啊啊]
#re: SQL Server全文索引的个人总结(上) 编辑
2005-07-26 22:59:00 | [匿名用户:办公室]
#re: SQL Server全文索引的个人总结(上) 编辑
半年总结
2005-06-21 21:23:00 | [匿名用户:王春成]
#re: SQL Server全文索引的个人总结(上) 编辑
生产技术
2005-06-18 07:53:00 | [匿名用户:z]
#re: SQL Server全文索引的个人总结(上) 编辑
德.能.勤各方面.以生产技术和工作业绩为主.
2005-06-18 07:47:00 | [匿名用户:z]
#re: SQL Server全文索引的个人总结(上) 编辑
nmn
2005-05-21 16:23:00 | [匿名用户:nm]
#个人总结 编辑
学生
2005-04-17 12:18:00 | [匿名用户:赖]
#re: SQL Server全文索引的个人总结(上) 编辑
对频繁更新的数据表 有没有程序代码呀,给我一份,谢谢
我的e-mail 是:happy2800@163.com
2005-04-16 09:32:00 | [匿名用户:shqcheng]
#re: SQL Server全文索引的个人总结(上) 编辑
检索技术已经很完善了。
2005-04-11 12:52:00 | [匿名用户:nihao]
#re: SQL Server全文索引的个人总结(上) 编辑
请问如何用其他程序加强MSSQL的分词技术呢?
期待回答!
cnkingfox@gmail.com
2005-01-12 03:57:00 | [匿名用户:kingfox]
#re: SQL Server全文索引的个人总结(上) 编辑
看了一下
2005-01-07 21:11:00 | [匿名用户:释都]
#re: SQL Server全文索引的个人总结(上) 编辑
请问一下我做论坛用全文索引合适吗?
2004-12-29 11:55:00 | [匿名用户:柯尔]
#re: SQL Server全文索引的个人总结(上) 编辑
检索技术已经很完善了。
但是对于中文,做困难的还是分词。
2004-11-24 21:26:00 | [匿名用户:sunny]
#re: SQL Server全文索引的个人总结(上) 编辑
关于全文索引的一个轻量级的引擎,在开源的AspNetForum中有相关实现。基本原理就是建立一张索引表,然后把需要查询的内容按照空格分隔(因为在引文中,空格是字符之间的分隔符)后,每个分隔后单词都插入这张查询表,同时生成并插入每个单词的hash值。
所以这样的实现对中文来说不太好,因为中文不是根据空格来分隔不同词的。如果一定要让上面的机制能用于中文,一种办法就是对每个中文字进行分隔,然后尽力索引。
2004-09-21 09:59:00 | [匿名用户:chegan]
#re: SQL Server全文索引的个人总结(上) 编辑
学到一点。谢谢
2004-09-01 18:47:00 | [匿名用户:gzhcz]
#回复: SQL Server全文索引的个人总结(上) 编辑
数据即时性强的不要用全文索引.
2004-05-14 09:24:00 | [匿名用户:niko]
#回复: SQL Server全文索引的个人总结(上) 编辑
我也前做全文索引的时候,用任务调度将索引的更新放到深夜来做,就会避免影响其他的用户使用,当然,可能不适合晚上要关机的服务器
2004-03-19 13:44:00 | [匿名用户:xlzhu]
#回复: SQL Server全文索引的个人总结(上) 编辑
应该不是那只猫吧!因为我属于看贴补回帖的:)
2004-03-19 11:41:00 | [匿名用户:carfield]
#回复: SQL Server全文索引的个人总结(上) 编辑
另外,是我们论坛的那只猫么?
2004-03-19 11:15:00 | [匿名用户:怡红公子]
#回复: SQL Server全文索引的个人总结(上) 编辑
对频繁更新的数据表,做全文检索,是不是划不来的??

有么有这方面的指标性数据,比如如何如何配置的机子,对多少条记录建立索引,会用多少时间。

又如:同样的机子,在全文检索后和没有全文检索后,CPU 内存这些指标又啥变化??
2004-03-19 11:04:00 | [匿名用户:ghj1976]
#回复: SQL Server全文索引的个人总结(上) 编辑
thank you,改正
2004-03-19 10:44:00 | [匿名用户:carfield]
#回复: SQL Server全文索引的个人总结(上) 编辑
说一下,在信息学中,这个不叫关键词
叫主题词

2004-03-19 10:39:00 | [匿名用户:怡红公子]
对不起,目前本随笔不允许发表新评论.

Powered by: Joycode.MVC引擎 0.5.1.8