%% Vs CONTAINSTABLE

时间:2012-08-16 21:35:12

标签: sql-server sql-server-2008 sql-server-2005

这是继续 Previous Query

DDL

CREATE TABLE [dbo].[t](
    [words] [varchar](1000) NULL,
    [id] [int] IDENTITY(1,1) NOT NULL
) ON [PRIMARY]

DML

insert into t(words)values('this is my laptop')
insert into t(words)values('this does not contains heqadphone')

这两个插入迭代250次......

SQL查询 - 1

SELECT * FROM 
t as t
JOIN CONTAINSTABLE(t, words,'"*heqadphone"') fulltextSearch
ON
t.[Id] = fulltextSearch.[KEY]

SQL查询 - 2

Select * from t where words like '%heqadphone%'

困惑

通常我们建议不要使用我后面的查询中所述的double %%。但在检查SQL事件探查器读取和持续时间

之后

查询1显示更多读取/持续时间。点击以下链接查看详细信息

SQL Profiler Reads and Duration for Query - 1

查询2显示较少的读取/持续时间。点击以下链接查看详细信息

SQL Profiler Reads and Duration for Query - 2

您能否确认,最好使用哪种查询?

3 个答案:

答案 0 :(得分:5)

您正在比较具有不同功能的两个不同功能:CONTAINSTABLE为您提供了其他信息,例如LIKE没有的排名。所以第一个问题是,你真的需要全文功能吗?如果您这样做,那么您别无选择:必须使用CONTAINSTABLE

另一方面,如果您不需要FTS功能但只想以最快的方式搜索列中的单个单词,那么最佳方法就是您正在做的事情:使用实际数据测试两个选项设置并查看哪个在您的环境中表现更好。如果LIKE表现更好,那么您可以使用它,但正如erikkallen所提到的,请确保使用与生产中相同的数据量进行测试。

答案 1 :(得分:1)

你有多少数据。如果你有250行,你可以做很多事情而不会很慢。如果这是您的生产数据量,那么随心所欲。如果没有,请使用您希望在生产系统中拥有的数据量运行测试。

答案 2 :(得分:0)

我认为,对于性能测量/分析,您需要的数据远远超过250*2 = 500行。 您应该尝试测试100,000记录

范围内的数据