现在的位置: 首页 > 综合 > 正文

全文索引学习

2012年10月13日 ⁄ 综合 ⁄ 共 2991字 ⁄ 字号 评论关闭
create table products
(
    pid int primary key,
    [no] varchar(100) unique not null,
    pname varchar(100),
    shijian timestamp
)
insert products select 1,'pro1','张三'
insert products select 2,'pro2','李四'
insert products select 3,'pro3','王五'
insert products select 4,'pro4','赵六'
insert products select 5,'pro5','楚七'
insert products select 6,'pro6','康璐妮'
insert products select 7,'pro7','文胸'
insert products select 8,'pro8','内衣aa'
insert products select 9,'pro9','456内衣AA'
insert products select 10,'pro10','wqaa'
insert products select 11,'pro11','中国aa'
insert products(pid,[no],pname) select 11189,'pro1333','老梅aa'
insert products(pid,[no],pname) select 11190,'pro1334','李aa'
insert products(pid,[no],pname) select 11195,'pro133336','刚aa'
insert products(pid,[no],pname) select 11196,'pro133337','特aa'
insert products(pid,[no],pname) select 111907,'pro133338','丽丽aa'

declare @i int
set @i=1
while(@i<100000)
begin
    set @i=@i+1
    insert products select @i,'P'+cast(@i as varchar(10)),'BB'+cast(@i as varchar(10)),null
end

select * from products
delete products where pid<180000
drop table products

--打开数据库全文索引的支持
execute sp_fulltext_database 'enable'
 go
--建立全文目录ft_titles
execute sp_fulltext_catalog 'myfulltext','create','E:\FullText'   --全文目录名,操作方式,路径
 go

--为products表建立全文索引数据元,UPKCL_titleidind是主键所建立的唯一索引,可由sp_help products得知
execute sp_fulltext_table 'products','create', 'myfulltext', 'PK__products__1367E606'  --表名,操作方式,全文目录名,唯一键键名(主键也可以)
go
--execute sp_fulltext_table 'products','drop' 删除全文索引对表标记

--设置全文索引列名
exec sp_fulltext_column 'products', 'no', 'add'
go
exec sp_fulltext_column 'products', 'pname', 'add'
go

--建立全文索引
exec sp_fulltext_table 'products', 'activate' --激活表,也就是将表注册在文件系统中的全文目录
exec sp_fulltext_table 'products', 'start_full' --使用表的完全填充
exec sp_fulltext_table 'products', 'start_incremental' --使用表的增量填充
--下面两句是启用更改跟踪,如果对表添加完数据后,启用更改跟踪,全文索引会自动进行完全填充
exec sp_fulltext_table 'products', 'start_change_tracking' --启动全文索引的增量填充。如果该表没有时间戳(猜测其实就是表里没有timestamp列),那么就启动全文索引的完全填充。开始跟踪表发生的变化。
exec sp_fulltext_table 'products', 'Start_background_updateindex'

--下面两句是停止更改跟踪
exec sp_fulltext_table 'products', 'stop_change_tracking'
exec sp_fulltext_table 'products', 'stop_background_updateindex'
go

--填充全文索引目录
--使用完全填充
exec sp_fulltext_catalog 'myfulltext', 'start_full'--使用目录的完全填充
go
--使用增量填充,条件是全文索引的表中存在一个 timestamp 列
exec sp_fulltext_catalog 'myfulltext', 'start_incremental'
--从文件系统中删除现有的全文目录,然后重建全文目录,并使该全文目录与所有带有全文索引引用的表重新建立关联。也就是删除全文目录利多索引
exec sp_fulltext_catalog 'myfulltext', 'Rebuild'
go

--查询全文索引目录填充状态
declare @t int
select fulltextcatalogproperty('myfulltext','populateStatus')

select fulltextcatalogproperty('myfulltext','PopulateCompletionAge')

select * from products
where contains(pname,'aa')

 

 

 

 

 

 

 

 

declare @beginDate DateTime,@endDate DateTime
set @beginDate=GETDATE()
declare @i int
while(1=1)
begin
    select @i=fulltextcatalogproperty('myfulltext','populateStatus')
    if(@i=0)
    begin
        set @endDate=GETDATE()
        break
    end
end
print DATEDIFF(mm , @beginDate , @endDate )
print DATEDIFF(ss , @beginDate , @endDate )

--使用增量填充,耗费13秒左右
--使用完全填充,耗费28秒左右
select fulltextcatalogproperty('myfulltext','populateStatus')

select * from products
where contains(pname,'62')

select * from products
where pname like '%62%'

 

抱歉!评论已关闭.