--    创建测试表
-- 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) --索引列,明确列中存储的语言,方便过滤,如果有多个索引列,用逗号分隔,例如:(Sentence1 LANGUAGE 2052, Sentence2 LANGUAGE 2052, Sentence3 LANGUAGE 2051)
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)

原文链接

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

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

    CSS颜色代码 颜色值 颜色名字大全 转载处http://flyjj.com/css-colour-code.html 颜色值 CSS 颜色使用组合了红绿蓝颜色值 (RGB) 的十六进制 (hex) ...

  2. Linux日常使用指令大全

    Linux日常使用指令大全 Java代码 www.ahlinux.com 001.日常维护常用查询命令 #top    显示系统进程 #clear  清理屏幕信息 #cat /etc/redhat-r ...

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

       http://blog.chinaunix.net/uid-9681606-id-1998590.html  linux指令大全(完整篇)(转) 2009-03-17 01:21:46 分类:  ...

  4. Linux常用指令【转载】

    [收藏]Linux常用指令[转载] $ 命令行提示符 粗体表示命令 斜体表示参数 filename, file1, file2 都是文件名.有时文件名有后缀,比如file.zip command 命令 ...

  5. Linux学习笔记之vim操作指令大全

    0x00 关于Vim Vim是款强大的文本编辑器,但是众多指令需要学习,这次记录了指令大全方便以后翻阅. Vim的几种模式 正常模式:可以使用快捷键命令,或按:输入命令行. 插入模式:可以输入文本,在 ...

  6. Linux超全实用指令大全

    参考 Linux超全实用指令大全

  7. MySql指令大全(转载)

    1.连接Mysql 格式: mysql -h主机地址 -u用户名 -p用户密码 1.连接到本机上的MYSQL.首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql -u root ...

  8. mysql sql语句大全(转载)

      1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明:备份sql server --- 创建 ...

  9. anki vector robot入门语音指令大全

    vector机器人功能不断完善. 一:刚开始支持一些基础指令,你跟他说话他能在本机识别,然后做出相应的响应.在说这部分指令之前,需要加上Hey Vector.(嘿,维课的),然后他会准备听取你的指令, ...

随机推荐

  1. [Python 从入门到放弃] 6. 文件与异常(二)

    本章所用test.txt文件可以在( [Python 从入门到放弃] 6. 文件与异常(一))找到并自行创建 现在有个需求,对test.txt中的文本内容进行修改: (1)将期间的‘:’改为‘ sai ...

  2. php里input数组的应用

    一般我们使用input传递表单数据时,可以使用<input name="xxx[]" value="1"><input name=" ...

  3. 百度前端学院task33源码及总结——听指令的小方块

    任务描述 如图,实现一个类似棋盘的格子空间,每个格子用两个数字可以定位,一个红正方形的DOM在这个空间内,正方形中的蓝色边表示这是他的正面,有一个input输入框 在输入框中允许输入如下指令,按下按钮 ...

  4. 异步消息队列Celery

    Celery是异步消息队列, 可以在很多场景下进行灵活的应用.消息中包含了执行任务所需的的参数,用于启动任务执行, suoy所以消息队列也可以称作 在web应用开发中, 用户触发的某些事件需要较长事件 ...

  5. Quartz2D简单图形

    这些天一直准备学绘图和核心动画这块,可一直找不到合适系统的教材,没有大纲,比较纠结,在网上搜了又搜,看着其他的博文写的 第一遍来学习绘制简单的图形 // 若想利用Quartz 2D在View上绘制信息 ...

  6. sscanf函数详解 & 查找文件字符串

    1. sscanf函数 sscanf() - 从一个字符串中读进与指定格式相符的数据. 1.1 函数原型 int scanf(const char *format, ...); int fscanf( ...

  7. 下拉加载更多DEMO(js实现)

    项目的一个前端页面展示已购买商品时,要求能下拉加载更多.花了点时间研究这个功能,以前没做过. 首先需要给div加scroll事件,监听滚动条滚动动作.那何时触发加载动作呢?当滚动条滚到底的时候.如何判 ...

  8. 手机调试 --- 通过chrome测试手机网站

     移动端有时候我们要调试手机网站. Chrome怎么调试手机页面呢? 毕竟有时候手机支持的JS度跟PC不一样.最开始就遇见了.手机端浏览器不支持执行string.includes. PC端支持该函数, ...

  9. Spring基础(6) : 普通Bean对象中保存ApplicationContext

    public class Person implements ApplicationContextAware{ ApplicationContext context; public String na ...

  10. ASP.NET C# List分页

    List.Skip((pagecount-1)*pagesize).Take(pagesize) 假设你每页10条数据当前是第3页 跳到第4页则:List.Skip((4-1)*10).Take(10 ...