SqlServer 全文索引指令大全(转载)

--    创建测试表
--    DROP TABLE FullTextIndexing
CREATE TABLE FullTextIndexing
(
    ID INT IDENTITY(1,1) NOT NULL,
    Sentence VARCHAR(MAX)
)

--    创建聚集索引
ALTER TABLE FullTextIndexing ADD CONSTRAINT PK_FullTextIndexing PRIMARY KEY CLUSTERED(ID ASC)
GO

--    将"全文搜索概述"页面的文字全部拷贝到txt,然后倒入到表FullTextIndexing中
--    https://msdn.microsoft.com/zh-cn/library/ms142547(v=sql.105).aspx

--    重复15次,从47行变为154万行
INSERT INTO FullTextIndexing(Sentence)
SELECT Sentence FROM FullTextIndexing
GO 15

SELECT COUNT(*) FROM FullTextIndexing
--    【注】删除的语句不要执行!
--    创建全文目录
--    https://msdn.microsoft.com/zh-cn/LIBRARY/ms189520(v=sql.105).aspx
CREATE FULLTEXT CATALOG [Catalog_Test]
WITH
    ACCENT_SENSITIVITY = ON    --区分重音
    AS DEFAULT                --默认目录
    AUTHORIZATION [dbo];--全文目录的所有者
GO

--    更改全文目录的属性
--    https://msdn.microsoft.com/zh-cn/LIBRARY/ms176095(v=sql.105).aspx
ALTER FULLTEXT CATALOG [Catalog_Test]
REBUILD WITH ACCENT_SENSITIVITY = ON;    --重新生成整个目录并区分重音
--REORGANIZE;    --重新组织全文目录
--AS DEFAULT;    --指定此目录为默认目录
GO

--    从数据库中删除全文目录(先删除全文索引)
--    https://msdn.microsoft.com/zh-cn/LIBRARY/ms188403(v=sql.105).aspx
DROP FULLTEXT CATALOG [Catalog_Test];
GO

--    创建干扰字表
--    https://msdn.microsoft.com/zh-cn/library/cc280405(v=sql.105).aspx
CREATE FULLTEXT STOPLIST [Stoplist_Test]
FROM SYSTEM STOPLIST
AUTHORIZATION [dbo];
GO  

--    添加删除干扰字
--    https://msdn.microsoft.com/zh-cn/library/cc280871(v=sql.105).aspx
ALTER FULLTEXT STOPLIST [Stoplist_Test]
ADD N‘乎‘ LANGUAGE 2052;
GO 

ALTER FULLTEXT STOPLIST [Stoplist_Test]
DROP N‘乎‘ language 2052;
--ALL LANGUAGE ‘English‘
--ALL
GO 

--    从数据库中删除全文本非索引字表
--    https://msdn.microsoft.com/zh-cn/library/cc280482(v=sql.105).aspx
DROP FULLTEXT STOPLIST [Stoplist_Test];
GO 

--    创建全文索引
--    https://msdn.microsoft.com/zh-cn/library/ms187317(v=sql.105).aspx
CREATE FULLTEXT INDEX ON [dbo].[FullTextIndexing]
(Sentence LANGUAGE 2052)        --索引列,明确列中存储的语言,方便过滤
KEY INDEX PK_FullTextIndexing    --全文键:当前表中唯一索引名称
ON [Catalog_Test]                --指定全文目录
WITH (
    STOPLIST [Stoplist_Test],    --指定全文非索引字表
    CHANGE_TRACKING AUTO        --自动填充
    );
GO

--    更改全文索引的属性
--    https://msdn.microsoft.com/zh-cn/library/ms188359(v=sql.105).aspx
--    激活全文索引
ALTER FULLTEXT INDEX ON [dbo].[FullTextIndexing] ENABLE;
GO

--    删除全文索引
--    https://msdn.microsoft.com/zh-cn/library/ms184393(v=sql.105).aspx
DROP FULLTEXT INDEX ON [dbo].[FullTextIndexing];
GO
--    测试常规查询方法(先查询全部数据,放到内存:154万行31秒)
SELECT * FROM FullTextIndexing

SET STATISTICS IO ON
SET STATISTICS TIME ON

SELECT * FROM FullTextIndexing WHERE Sentence LIKE ‘%全文索引%‘
/*执行了几遍,耗时13440 毫秒

SQL Server 分析和编译时间:
   CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。

(229376 行受影响)
表 ‘FullTextIndexing‘。扫描计数 1,逻辑读取 15633 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

 SQL Server 执行时间:
   CPU 时间 = 11591 毫秒,占用时间 = 13440 毫秒。
*/

SELECT * FROM FullTextIndexing WHERE CHARINDEX(‘全文索引‘,Sentence)<>0
/*执行了几遍,耗时15338 毫秒

SQL Server 分析和编译时间:
   CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。

(229376 行受影响)
表 ‘FullTextIndexing‘。扫描计数 1,逻辑读取 15633 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

 SQL Server 执行时间:
   CPU 时间 = 12714 毫秒,占用时间 = 15338 毫秒。
*/

--    使用全文索引的方法:
SELECT * FROM [dbo].[FullTextIndexing] WHERE FREETEXT(Sentence,‘全文索引‘);
/*执行了几遍,耗时17402 毫秒
SQL Server 分析和编译时间:
   CPU 时间 = 16 毫秒,占用时间 = 21 毫秒。

(851968 行受影响)
表 ‘FullTextIndexing‘。扫描计数 1,逻辑读取 15633 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

 SQL Server 执行时间:
   CPU 时间 = 2230 毫秒,占用时间 = 17402 毫秒。
*/

--    执行了17秒,不降反而上升了!!~
--    重新生成全文目录!~再执行(更多方法有待参考:使用全文搜索查询 SQL Server)
--    https://msdn.microsoft.com/zh-cn/library/ms142559(v=sql.105).aspx
ALTER FULLTEXT CATALOG [Catalog_Test] REBUILD;
GO
SELECT * FROM [dbo].[FullTextIndexing] WHERE FREETEXT(Sentence,‘全文索引‘);
SELECT * FROM [dbo].[FullTextIndexing] WHERE CONTAINS(Sentence,‘全文索引‘);
SELECT * FROM [dbo].[FullTextIndexing] WHERE CONTAINS(Sentence,‘全文 AND 索引‘);

/*这时快多了!~不到1秒就查询完成!~但是返回的行数才1000多行

SQL Server 分析和编译时间:
   CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。

(8853 行受影响)
表 ‘FullTextIndexing‘。扫描计数 0,逻辑读取 27121 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

 SQL Server 执行时间:
   CPU 时间 = 78 毫秒,占用时间 = 944 毫秒。
*/
SET STATISTICS IO OFF
SET STATISTICS TIME OFF
不断地执行就会找出规律:
表扫描次数为0。
逻辑读也越来越多,耗时越来越多,查询返回的行数也越来越多,性能越来越差!~比"like"还差
最后还得重建重组(REBUILD/REORGANIZE)全文索引目录

逻辑读取 27121 次
逻辑读取 945268 次
逻辑读取 1212885 次
逻辑读取 1407846 次
逻辑读取 1736686 次
逻辑读取 1953265 次
--    查询句词拆分结果.可以看到按什么词语进行匹配查询
select * from sys.dm_fts_parser(‘全文索引‘,2052,5,0)

--    如果只需要全文键或排名的信息,可使用表值函数
--    使用表值函数的方法可以使用联接提示或查询提示(LOOP/MERGE/HASH)
ALTER FULLTEXT CATALOG [Catalog_Test] REBUILD;
GO
ALTER FULLTEXT CATALOG [Catalog_Test] REORGANIZE;
GO

SELECT * FROM [dbo].[FullTextIndexing] t1
INNER JOIN CONTAINSTABLE([FullTextIndexing],Sentence,‘概述‘) AS t2
ON t1.ID = t2.[KEY]
GO

SELECT * FROM [dbo].[FullTextIndexing] t1
INNER JOIN FREETEXTTABLE([FullTextIndexing],Sentence,‘概述‘,LANGUAGE 2052,1000) AS t2
ON t1.ID = t2.[KEY]
ORDER BY t2.RANK DESC;
GO
--    相关视图:
select * from sys.syslanguages
select * from sys.fulltext_indexes
select * from sys.fulltext_catalogs where name = ‘Catalog_Test‘
select * from sys.dm_fts_active_catalogs where name = ‘Catalog_Test‘
select * from sys.fulltext_stoplists where name = ‘Stoplist_Test‘
select * from sys.fulltext_stopwords where stoplist_id = 5 --and language_id = 2052
select * from sys.dm_fts_parser(‘全文索引‘,2052,5,0)

原文链接

时间: 2024-10-12 13:01:39

SqlServer 全文索引指令大全(转载)的相关文章

所有运行命令指令大全

简介/操作 打开开始菜单,其中的"运行"是通向程序的快捷途径,输入特定的命令后,即可快速的打开Windows的程序,熟练的运用它,将给我们的操作带来诸多便捷.接下来我将介绍各个运行指令:运行的界面,在打开中输入口令: 具体运行口令 %temp%                       打开零时文件夹 .                                    C:\Documents and Settings\用户名所在文件夹 ..                  

Linux系统文本编辑器vim指令大全

本文适合Vim新手,既可阅读入门 相关在线资料http://baike.baidu.com/subview/113188/9338173.htm?fr=aladdin vim的使用之汇总   vimtutor (在线学习) 功能最强在的编辑器--vim vi是所有UNIX系统都会提供的屏幕编辑器,它提供了一个视窗设备,通过它可以编辑文件.当然,对UNIX系统略有所知的人,或多或少都觉得vi超级难用,但vi是最基本的编辑器,所以希望读者能好好把它学起来,以后在UNIX世界里必将畅行无阻.游刃有余,

CSS颜色代码 颜色值 颜色名字大全(转载)

CSS颜色代码 颜色值 颜色名字大全 转载处http://flyjj.com/css-colour-code.html 颜色值 CSS 颜色使用组合了红绿蓝颜色值 (RGB) 的十六进制 (hex) 表示法进行定义.对光源进行设置的最低值可以是 0(十六进制 00).最高值是 255(十六进制 FF).从 0 到 255 种红绿蓝值能够组合出总共超过一千六百万种不同的颜色(根据 256 x 256 x 256 计算).十六进制值使用三个双位数来编写,并以 # 符号开头.如下: FFFFFF #D

带注释的汇编指令大全

一.数据传输指令 ─────────────────────────────────────── 它们在存贮器和寄存器.寄存器和输入输出端口之间传送数据. 1. 通用数据传送指令. MOV 传送字或字节.  如:MOV eax,11  意思:eax=11 MOVSX 先符号扩展,再传送. MOVZX 先零扩展,再传送. PUSH 把字压入堆栈. POP 把字弹出堆栈. PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈. POPA 把DI,SI,BP,SP,BX,DX,CX

8080汇编指令大全

8080汇编手册数据传输指令 ────────────────────────────── 它们在存贮器和寄存器.寄存器和输入输出端口之间传送数据. 1. 通用数据传送指令. MOV 传送字或字节. MOVSX 先符号扩展,再传送. MOVZX 先零扩展,再传送. PUSH 把字压入堆栈. POP 把字弹出堆栈. PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈. POPA 把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈. PUSHAD 把EAX,ECX,E

Eclipse快捷键大全(转载网上及课堂总结)

Eclipse快捷键大全(转载网上及课堂总结) Ctrl+1 快速修复(最经典的快捷键) Ctrl+D: 删除当前行 Ctrl+Alt+↓ 复制当前行到下一行(复制增加) Ctrl+Alt+↑ 复制当前行到上一行(复制增加) Alt+↓ 当前行和下面一行交互位置(特别实用,可以省去先剪切,再粘贴了) Alt+↑ 当前行和上面一行交互位置(同上) Alt+← 前一个编辑的页面 Alt+→ 下一个编辑的页面(当然是针对上面那条来说了) Alt+Enter 显示当前选择资源(工程,or 文件 or文件

带凝视的汇编指令大全

一.传输数据指令 ─────────────────────────────────────── 它们在存贮器和寄存器.寄存器和输入输出port之间传送数据. 1. 通用数据传送指令. MOV 传送字或字节.  如:MOV eax,11  意思:eax=11 MOVSX 先符号扩展,再传送. MOVZX 先零扩展,再传送. PUSH 把字压入堆栈. POP 把字弹出堆栈. PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈. POPA 把DI,SI,BP,SP,BX,DX,

Mysql常用命令行大全——转载

转载地址:http://www.blogjava.net/supperchen/archive/2012/10/11/389340.html 第一招.mysql服务的启动和停止 net stop mysql net start mysql 第二招.登陆mysql 语法如下: mysql -u用户名 -p用户密码 键入命令mysql -uroot -p, 回车后提示你输入密码,输入12345,然后回车即可进入到mysql中了,mysql的提示符是: mysql> 注意,如果是连接到另外的机器上,则

linux指令大全(完整篇)(转)

http://blog.chinaunix.net/uid-9681606-id-1998590.html linux指令大全(完整篇)(转) 2009-03-17 01:21:46 分类: LINUX cat cdchmod chowncp cut 名称:cat使用权限:所有使用者使用方式:cat [-AbeEnstTuv] [--help] [--version] fileName说明:把档案串连接后传到基本输出(萤幕或加 > fileName 到另一个档案)参数:-n 或 --number