• 全文索引学习


    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%'

     

  • 相关阅读:
    JobTracker作业启动过程分析
    结构体传参
    getchar()
    char *a与char a[n]的区别
    EOF NULL 之间的区别
    现代方法第15章第三节的程序
    交换机console口连接
    undefined reference问题总结
    二维数组与指针
    数组作为参数传递的时候,被调用的函数内无法计算出数组的大小
  • 原文地址:https://www.cnblogs.com/mxw09/p/1886767.html
Copyright © 2020-2023  润新知