2

这是我以前的查询的延续

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%'

困惑

通常,我们建议不要使用我稍后查询中所述的双倍 %% 。但是在检查 SQL Profiler Reads and Duration 之后

查询 1 显示更多 reads/duration 。点击以下链接查看详情

SQL Profiler 读取和查询持续时间 - 1

查询 2 显示较少的 reads/duration 。点击以下链接查看详情

SQL Profiler 读取和查询持续时间 - 2

您能否确认,理想情况下哪个查询可以很好地使用?

4

3 回答 3

5

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

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

于 2012-08-17T16:03:14.790 回答
1

您将拥有多少数据。如果你有 250 行,你几乎可以做任何事情而不会很慢。如果那是您的生产数据量,那么做任何您想做的事情。如果没有,请使用您期望在生产系统中拥有的数据量运行您的测试。

于 2012-08-16T23:40:01.310 回答
0

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

于 2012-08-22T13:20:20.160 回答