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-16 11:35:44

SqlServer 全文索引创建及测试的相关文章

SqlServer中创建Oracle连接服务器

转自太祖元年的:http://www.cnblogs.com/jirglt/archive/2012/06/10/2544025.html参考:http://down.51cto.com/data/910072SqlServer中创建Oracle连接服务器 第一种:界面操作 (1)展开服务器对象-->链接服务器-->右击“新建链接服务器”(2)输入链接服务器的IP (3)链接成功后 第二种:语句操作 注:需要提前安装Oracle客户端程序,重启机器.(如果没有Oracle客户端程序,提示“未找

soapui中文操作手册(二)----通过您的WSDL请求创建一个测试

1.通过您的WSDL请求创建一个测试 点击加号旁边的导航拓展项目树的Web服务,并选择请求: 在SoapUI Pro中,所述请求编辑出现在右边.SoapUI Pro有一个编辑器,它简化了XML的层次结构,无论是在请求和响应,并实时可定制. 了解更多关于表单编辑器和大纲编辑器. 如果您正在使用SoapUI免费版,你必须如下所示的代码编辑器中手动输入数据.为了从本教程中充分受益,你应该使用专业版. 2.在请求编辑器中,选择Add This Request to TestCase. soapUI中接受

Sql语句在SqlServer中创建数据库、表格并添加约束

通过Sql语句来创建数据库与架构 创建数据库 数据库的创建首先是要引用主数据库的,需要在master数据库的环境下进行创建.大致的语法如下: 1 -- 使用master数据库 2 use master 3 -- 创建数据库 4 create datebase [架构名.]数据库名 5 on [primary]--主文件数据描述 6 ( 7 name = '数据库逻辑名', --一般是数据库的名称 8 filename = '数据文件的名字',--全路径 9 size = 12mb, --数据文件

lucene3.0+版本中文分词测试+搜索结果+创建索引测试

lucene3.0+版本中文分词测试+搜索结果+创建索引测试 import java.io.File; import java.io.IOException; import java.io.StringReader; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.TokenStream; import org.apache.lucene.analysis.tokenattributes.

SQLIOSim 模拟SQLServer的行为来测试IO性能

SQLIOSim 功能: 模拟SQLServer的行为来测试IO性能. SQLIOSim的版本: (1) SQL Server 2005的SQLIOSim是需要上网下载的套件. (2) 从SQL Server 2008开始,SQLIOSim会包含在SQL Sever安装内.对于SQL Server 2008 R2,该应用程序所在目录为C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Binn. (3) SQLIO

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 -- 将"全文搜索概述"

sqlserver中创建链接服务器

链接服务器在跨数据库/跨服务器查询时非常有用(比如分布式数据库系统中),本文将以图文方式详细说明如何利用SQL Server Management Studio在图形界面下创建链接服务器. 1.展开服务器对象-->链接服务器-->右击"新建链接服务器"注意:必须以数据库管理员身份登录(通常也就是sa帐号)后,才可以创建"链接服务器" 2.输入链接服务器的IP 3.设置链接服务器的安全性 完成后,如下图:现在测试一下,用帐号user本地登录SqlServe

SqlServer——全文索引

当我们想要模糊查询时,之前用like %来进行查询,但是为了提高查询速度,提出了全文索引. 全文索引是用空间换取了时间,它将每个表中的数据进行切分存储,这样就能很快的定位到模糊查询的数据. 全文索引快的原因以及contains与like查找区别比较 下面是摘自百度百科的介绍: 全文索引技术是目前搜索引擎的关键技术. 试想在1M大小的文件中搜索一个词,可能需要几秒,在100M的文件中可能需要几十秒,如果在更大的文件中搜索那么就需要更大的系统开销,这样的开销是不现实的. 所以在这样的矛盾下出现了全文

jmeter3.2 创建webservice 测试

1.创建测试计划 templates→select Template→Building a SOAP WebService Test Plan 2.修改HTTP Request Defaults中的参数"服务器名称或ip" 3.修改Soap Request 4.修改HTTP Header Manager 一些webservice服务可能用不到SOAPACtion,这时候可以删掉这个.目前,只有.NET使用SOAPAction,所以SOAPAction对其他webservice可以为空(