为什么我的SQL查询使用包含数最多需要2分钟

为什么我的SQL查询使用包含数最多需要2分钟,sql,sql-server,full-text-search,full-text-indexing,Sql,Sql Server,Full Text Search,Full Text Indexing,我有一个名为Locations的表,所有列上都有全文索引。有一个PK列(INT),其余为TEXT/VARCHAR。这张表有300000条记录 以下查询需要2分钟才能返回一条记录。 从包含(*,“'1*”)订单的位置按位置ID选择前1* 当使用长度为1到3位的任意数字组合时,这种缓慢的查询时间是一致的 使用a字符(a-zA-Z)正常执行,响应时间低于25毫秒 你知道为什么数值会导致这样的性能下降吗?我怀疑这是两个原因的组合 原因1:对常用前缀的通配符搜索速度较慢。记录中是否包含大量以“1”开头的字

我有一个名为Locations的表,所有列上都有全文索引。有一个PK列(INT),其余为TEXT/VARCHAR。这张表有300000条记录

以下查询需要2分钟才能返回一条记录。
从包含(*,“'1*”)订单的位置按位置ID选择前1*

当使用长度为1到3位的任意数字组合时,这种缓慢的查询时间是一致的

使用a字符(a-zA-Z)正常执行,响应时间低于25毫秒


你知道为什么数值会导致这样的性能下降吗?

我怀疑这是两个原因的组合

原因1:对常用前缀的通配符搜索速度较慢。记录中是否包含大量以“1”开头的字符串(数字或字母数字)?如果是这样的话,这或许可以解释为何表现不佳

通配符搜索往往比其他全文搜索慢。包含前缀的术语越多(在您的例子中为“1”),全文引擎需要做的工作就越多

尽管对于全文引擎来说,300000条记录并不是一个需要处理的记录,但每个记录中唯一术语的数量以及每个术语所在的记录和列的数量等因素对搜索性能的贡献更大


原因2:缺少按列排序的索引。您应该确保LocationID列已被索引,因为这是您排序结果的方式。“1*”可能会生成很多结果,所有这些结果都需要排序。如果没有索引,排序可能需要很长时间。

什么类型的数据库?Microsoft SQL Server显示两个查询的执行计划