我正在使用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。
问题:尽管已经为查询中的所有列创建了索引,但为什么具有少量行的查询会花费这么多时间。
答案 0 :(得分:1)
没有普通索引可以提供帮助,因为索引结构无法帮助LIKE
查询前导通配符。
如果您要查询字 1 并且在您的环境中可以接受 ,那么您可以在{{1}上启用full text search }}。全文索引可以提供帮助,因为它的字面向并且旨在支持CONTAINS
样式查询。
1 除非这是"关键字"样式列,在这种情况下,它根本不应该像这样存储,而应改为重新编码,以便每个关键字都包含在某个表中引用正在讨论的当前表中的行中。