尽管覆盖了索引,但MS SQL Server 2014中的查询需要很长时间

时间:2018-04-23 07:35:34

标签: sql-server database

我正在使用MS SQL SERVER 2014托管多个应用程序并尝试运行以下查询:

SELECT distinct Col_1,Col_2,Col_3 FROM TABLE WHERE  col_3 LIKE '%criteria%'

Col_1上有聚簇索引,Col_2和Col_3上有非聚集索引。但是,Col_3上的非聚集索引包括不属于此查询的另一列。

表中的总行数为115,000,此查询返回的行数为1132。

我尝试了五次,然后是每次尝试所花费的时间

1:32,
1:51,
1:52,
1:50,
2:05

我检查了服务器允许的并发连接数,该数量是无限制的(指定为0)。

我检查了分配给服务器的最小和最大内存为0和4096 MB。

问题:尽管已经为查询中的所有列创建了索引,但为什么具有少量行的查询会花费这么多时间。

1 个答案:

答案 0 :(得分:1)

没有普通索引可以提供帮助,因为索引结构无法帮助LIKE查询前导通配符。

如果您要查询 1 并且在您的环境中可以接受 ,那么您可以在{{1}上启用full text search }}。全文索引可以提供帮助,因为它的面向并且旨在支持CONTAINS样式查询。

1 除非这是"关键字"样式列,在这种情况下,它根本不应该像这样存储,而应改为重新编码,以便每个关键字都包含在某个表中引用正在讨论的当前表中的行中。