?
-- 创建测试表 -- 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(