SQL Server自由文本搜索与In子句

时间:2014-01-20 22:29:52

标签: sql-server sql-server-2008 full-text-search

我目前在varchar字段上使用IN子句。使用FTS的Contains会有助于提高性能吗?

例如

Select * from Orders where City IN (‘London’ , ‘New York’)

VS

Select * from Orders where Contains (City, ‘London or New York’)

提前致谢。

1 个答案:

答案 0 :(得分:1)

表格定义

CREATE TABLE Orders(ID INT PRIMARY KEY NOT NULL IDENTITY(1,1),City VARCHAR(100))
GO

INSERT INTO Orders 
VALUES ('London'),('Newyork'),('Paris'),('Manchester')
,('Liverpool'),('Sheffield'),('Bolton')
GO

使用ID作为键在城市列上创建FTS

 Used SSMS to create FTS Index.

<强>查询

-- Query 1
Select * from Orders 
where City IN ('London' , 'NewYork')
GO
-- Query 2
Select * from Orders where 
Contains (City, '"London" or "NewYork"')
GO

两个查询的执行计划

enter image description here

正如您所看到的,使用FTS的查询比使用IN运算符的查询花费了3倍。

说到这一点,当谈到在sql server中找到语言特定术语时,FTS是要走的路,例如寻找Inflectional表单,Synonymous以及更多 Read Here 以获取更多信息信息。