(前端理论为摘抄)大家都知道LIKE查询很慢,全文索引就是事先做好相关的索引,表示哪个主题词可以在哪些记录里找到,甚至事先计算好,检索时可以把相关度高的先列出来,这可以大大提高检索的速度。
打个比方,你有很多的小抽屉,每个抽屉里面放一些杂物,假如你要找东西,最原始的方法就是一个个抽屉翻,这就是没有索引的情况。
假如聪明一点,给抽屉编号(唯一键),把哪个号码的抽屉有什么东西记录在纸上,找东西先看看这张纸,这就是普通索引,假如你要知道哪个抽屉有什么,你可以在纸上迅速找到抽屉号码(大家知道这是使用查找树),然后得到相关的信息,这种情况普通索引是很快的;但是要找到一个特定的东西哪些抽屉有,你就要把整张纸遍历一次,这就是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 企业管理器、向导或存储过程创建、管理和除去。
--参考表QQblog(仅供参考)
Create table QQBlog
(
id char(10) Constraint PK_Id primary key,--注意:蓝色为关键字,Primary key为主键约束;PK_ID为主键约束名
topic varchar(30)not null,--标题一般不允许空,所以设置不为"空"
QQcontent varchar(8000),--内容
kind char(8)Constraint DF_Kind default '个人日志',--原创、转载,个人日志
begintime datetime Constraint DF_BeginTime default getdate(),--getdate():获得当前日期和时间
visitCount int,--访问量
replyCount int --回复量
)
insert qqblog(topic,QQcontent,kind) values('白雪公主','在丹麦的一个小农村,里面发生了一起感人的事件,一个青蛙','日志')
insert qqblog(id,topic,QQcontent,kind) values('blog07','软件','安阿饿是NIIT有个人马化腾,开发了一款软件,会讲故事,java c#,右微软买了该软件','日志')
insert qqblog(topic,QQcontent,kind) values('QQ之父','1998年,马化腾和几个同学成立了自己的软件公司,当时公司很小,主营业务是为其他公司做软件外包.据马化腾回忆说,当时跟他很熟的丁磊正在做邮箱系 统,之后也卖了很多版本,“我也做过邮件,也给寻呼台做过互动系统,比如短信查邮件什么的,即时通信是其中一个项目.”
做好了软件系统,接下来就是销售,“当时并不止我一家在做这种通信产品,有一次投标,为了抢先,我甚至在产品成型前就先写好了投标书.”结果当然是投标失败,“但现在想想还真的是幸运,那个拿到项目的公司没有再维护产品,只有我们的QQ被砸在手上,才会持续做下去.”
连马化腾自己都没有想到,到了2000年的时候,随便走进一个网吧,聊天工具QQ跳动的企鹅已经成了流行,“我没想到那么多人在网上争着和认识不认识的人聊天,好多人为此刻苦学习打字,真疯狂.”
','日志')
insert qqblog(topic,QQcontent,kind) values('QQ之父2',' “要说煎熬,我创业最煎熬的就是这段时间,我不喜欢这样的拖延,那时候纳斯达克已经快崩盘了.”
产品有人用,离公司上市还有一大段距离,无论如何,2000年的腾讯还是个小公司,而且它的驻地在深圳,“深圳没有北京的海归圈子,当时的风险投资也不懂,全靠高交会帮了忙.”马化腾回忆说,看在国外的前辈ICQ的成功经验上,盈科数码和IDG投资了腾讯,“两家一起进,壮着胆子.”
但马化腾的融资过程并不顺利,随着互联网冬天的临近,IDG投资完之后一直忙着为马化腾的公司找下家,“找过搜狐、新浪,他们都没看得上眼.”马化腾记 得,当时任职搜狐的古永锵和冯珏都到腾讯看过一眼,2001年春天,马化腾自己又去新浪见了王志东和汪延,但后来都没了消息.
最后进场的买家是传媒集团MIH,而最令马化腾心焦的一段创业经历也自此开始,“我愿意找更有实力的投资人,IDG也愿意出售股权,但盈科不答应.”当时的盈科,小超人李泽楷的数码港计划如日中天,“他甚至还找过王晶这样的导演来我们公司参观,探讨前景.”
','日志')
insert qqblog(topic,QQcontent,kind) values('QQ之父3','“要说煎熬,我创业最煎熬的就是这段时间,我不喜欢这样的拖延,可当时盈科不说买也不说卖,把我们晾在一边,等到最后终于定下来出售已经是2001年6月,那时候纳斯达克已经快崩盘了.”
资本市场的幸运与否也许真的很难判断,到了2008年6月,因为股价增长强劲和稳定,腾讯成为恒生指数的成分股,它顶替的正是盈科.马化腾 王志东和汪延
受惠母亲一本清晰的财务账“她很负责任地帮我整理财务报表,后来公司搬家,搬那些桌椅板凳都是家里人帮忙,因为公司要减轻负担.”
现在看起来,马化腾的创业途径很符合年轻人对所谓“知识英雄”的想象,写代码出身,几个同学合伙创业,一起加班吃盒饭,熬夜改产品,凭借创意和勤奋取得成功,慢慢地公司上市,简陋的办公室换成宏伟的大楼,创始人进入富豪榜.
但实际的情形要艰苦得多,以至于马化腾需要给自己最感谢的人列一个长长的名单,“要感谢家里人,最开始我妈不同意,我爸挺支持我的,可最早的董事长却是我母亲.”马化腾回忆说,一开始,几个年轻人是拿着母亲的退休证去注册的公司,但这位法人母亲几乎都没来过公司,“可是她很负责任地帮我整理财务报表,后来 公司搬家,搬那些桌椅板凳都是家里人帮忙,因为公司要减轻负担.”马化腾的感谢名单里还有当时深圳电脑协会的秘书长“丁阿姨”,还有现在深圳电信局的一个朋友,“是他们帮我们找了办公场地,免我们的租金,联系托管服务器,现在看好像这些事情很小,但没有这些,当时真不敢往下走.”
也许是对创业过程中这些帮助难以忘却,马化腾在招聘时定下一个标准——“人品好”,“我几乎是有点偏执地超级强调这一点,我们几个创始人都喜欢简单,不喜欢搞政治化,哪怕你说我不懂也好,我就是强调简单,人品第一,这样的毕业生进入我的公司培养三年,我让他成为业务骨干.”
','日志')
Declare @i int --定义@i变量为int型
set @i=152792 --变量的初始化
while @i<=1000000
begin
set @i=@i+1 --每次加1
insert QQBlog(id,topic,QQcontent,kind) values('blog'+convert(char(7),@i),'QQ历史','要说煎熬,我创业最煎熬的就是这段时间,我不喜欢这样的拖延,可当时盈科不说买也不说卖,把我们晾在一边,等到最后终于定下来出售已经是2001年6月,那时候纳斯达克已经快崩盘了.”
资本市场的幸运与否也许真的很难判断,到了2008年6月,因为股价增长强劲和稳定,腾讯成为恒生指数的成分股,它顶替的正是盈科.马化腾 王志东和汪延
受惠母亲一本清晰的财务账“她很负责任地帮我整理财务报表,后来公司搬家,搬那些桌椅板凳都是家里人帮忙,因为公司要减轻负担.”
现在看起来,马化腾的创业途径很符合年轻人对所谓“知识英雄”的想象,写代码出身,几个同学合伙创业,一起加班吃盒饭,熬夜改产品,凭借创意和勤奋取得成功,慢慢地公司上市,简陋的办公室换成宏伟的大楼,创始人进入富豪榜.
但实际的情形要艰苦得多,以至于马化腾需要给自己最感谢的人列一个长长的名单,“要感谢家里人,最开始我妈不同意,我爸挺支持我的,可最早的董事长却是我母亲.”马化腾回忆说,一开始,几个年轻人是拿着母亲的退休证去注册的公司,但这位法人母亲几乎都没来过公司,“可是她很负责任地帮我整理财务报表,后来 公司搬家,搬那些桌椅板凳都是家里人帮忙,因为公司要减轻负担.”马化腾的感谢名单里还有当时深圳电脑协会的秘书长“丁阿姨”,还有现在深圳电信局的一个朋友,“是他们帮我们找了办公场地,免我们的租金,联系托管服务器,现在看好像这些事情很小,但没有这些,当时真不敢往下走.”
也许是对创业过程中这些帮助难以忘却,马化腾在招聘时定下一个标准——“人品好”,“我几乎是有点偏执地超级强调这一点,我们几个创始人都喜欢简单,不喜欢搞政治化,哪怕你说我不懂也好,我就是强调简单,人品第一,这样的毕业生进入我的公司培养三年,我让他成为业务骨干.”
','日志')
end
select * from qqblog
sp_fulltext_database enable --1.激活数据使能全文索引
go
create fulltext catalog cat1 as default --2.建立全文目录:建好在FTData下面.指定该目录为默认目录
create fulltext index on QQBlog(QQcontent) key index PK_Id --3.建立全文索引 on cat1 with NO POPULATION ,创建之后不填充
--
alter fulltext index on QQBlog start full population--4.起用填充
--只有在用户使用 START FULL、INCREMENTAL 或 UPDATE POPULATION 子句执行 ALTER FULLTEXT INDEX 命令后,才会填充索引。
--开始/增长/更新
--5.使用全文索引
--在qqblog表中查找包含马化腾或盈科 的所有记录
select * from qqblog where qqContent like '%马化腾%' or qqContent like '%盈科%' --51秒
select count(*) from qqblog --161012
select * from qqblog where freetext(QQcontent,'马化腾 在 王志东')--freetext(列名,'要查找内容')--23秒--161010
--马化腾 王志东 是马化腾或王志东
select * from qqblog where contains(QQContent,'"马化腾" or "王志东"')--161007
--contains:"马化腾 王志东",这是一个短语
--有点区别???
select * from qqblog where QQContent like '%马化腾%'
--要注意查找的时候不要包含噪音词:在FTData下面的noise...文件下
/*记录的比较凌乱,请大家原谅,希望能从中找到适合自己的东东*/
-- contains谓词主要是针对单字或句子做查询。
-- freetext谓词则会将指定的句子分解为一个个的单字,然后查询这些单字。
----------------------------------contains-----------------------------------------
--搜寻书籍名称字段中有 windows computer print 这个单词的记录
select * from 书籍 where
contains(书籍名称,'"windows or computer or print"')
select * from 书籍 where contains(书籍名称,'"windows"')
--搜寻书籍字段中包含短语的记录
select * from 书籍 where contains(书籍名称,'"a computer failure"')
--例:this is a computer,failure to work 此句子也将被搜寻出来。
--带有通配符的查询
select * from 书籍 where contains(书籍名称,'"sea*" OR "bread*"')
--下面的示例返回包含短语 "sasquatch ale" 或 "steeleye stout" 的所有产品。
use northwind
go
select productname
from products
where contains(productname, ' "sasquatch ale" or "steeleye stout" ')
go
--------------------------------freetext----------------------------
select * from 书籍 where freetext(地址,' "I like windows 2000 and photoshop 5" ')
select * from 书籍 where freetext(地址,' "北京市大兴区林校北路" ')
-- a. 使用 freetext 搜索包含指定字符值的单词
-- 下例搜索产品描述中含有与 sweetest bread、candy、dry 和 meat 相关的词语的
-- 所有产品类别,如 breads、candies、dried 和 meats 等。
use northwind
go
select categoryname
from categories
where freetext (description, 'sweetest candy bread and dry meat' )
go
--b. 在全文检索中使用变量
-- 下例使用变量而不是特定的搜索术语。
use pubs
go
declare @searchword varchar(30)
set @searchword ='moon'
select pr_info from pub_info where freetext(pr_info, @searchword)