Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 尽管覆盖了索引,但MS SQL Server 2014中的查询耗时较长_Sql Server_Database - Fatal编程技术网

Sql server 尽管覆盖了索引,但MS SQL Server 2014中的查询耗时较长

Sql server 尽管覆盖了索引,但MS SQL Server 2014中的查询耗时较长,sql-server,database,Sql Server,Database,我正在使用MS SQL SERVER 2014托管多个应用程序,并尝试运行以下查询: SELECT distinct Col_1,Col_2,Col_3 FROM TABLE WHERE col_3 LIKE '%criteria%' 列1上有聚集索引,列2和列3上有非聚集索引。但是,Col_3上的非聚集索引包含不属于此查询的另一列 表中的总行数为115000,此查询返回的行数为1132 我试过运行它五次,下面是每次尝试所花费的时间 1:32, 1:51, 1:52, 1:50, 2:05

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

SELECT distinct Col_1,Col_2,Col_3 FROM TABLE WHERE  col_3 LIKE '%criteria%'
列1上有聚集索引,列2和列3上有非聚集索引。但是,Col_3上的非聚集索引包含不属于此查询的另一列

表中的总行数为115000,此查询返回的行数为1132

我试过运行它五次,下面是每次尝试所花费的时间

1:32,
1:51,
1:52,
1:50,
2:05
我检查了服务器允许的不受限制的并发连接数(指定了0)

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


问题:尽管已为查询中的所有列创建了索引,但为什么一个具有少量行的查询却要花费如此多的时间。

普通索引没有帮助,因为索引结构无法帮助像带有前导通配符的这样的查询

如果您正在查询words1及其在您的环境中可接受的内容,则可以打开
col_3
。全文索引可以提供帮助,因为它是面向单词的,并且旨在支持样式查询



1除非这是一个“关键字”样式的列,在这种情况下,它不应该像这样存储,而是应该重新建模,以便每个关键字都包含在引用当前讨论表的某个表中自己的行中。

简短回答?你的陈述不可取。原因是它不能利用覆盖查询,因为在条件的开头也有通配符。您可能想了解一下这一点:检查查询执行以确定是否缺少任何索引,或者确定需要花费时间的地方?大多数情况下,看起来像是索引问题。谢谢你的回复。如果我将“WHERE”条件更改为CHARINDEX('criteria',column_3)>0,您认为这会有帮助吗?否,您当前的索引按字母顺序列出了存储在
col_3
中的所有值。如果你知道你要搜索的东西的前导字符是什么,这是很有帮助的,但是如果你搜索的文本中前导字符是未知的,这就没有帮助了。在家里试试这个练习——拿起一本字典,找出所有字符
set
出现在任何地方的单词。字典存在并且按字母顺序排序,这一事实真的能帮助你完成这项任务吗?明白你的意思了。。。谢谢你,兄弟。。。但是,您能否评论一下这样一个事实:有时同一个查询会非常快地返回结果集。。。大约5-15秒后。。。然后再次回到同样的程序,在1.5分钟内返回结果。。。这可能是什么原因???@Tiyyob-最类似于加速的原因是,如果表的大多数/所有页都留在RAM中,并且没有因为其他查询而被逐出。@Tiyyob,请注意,即使有覆盖索引,由于前导通配符,也需要进行完全扫描。由于比较规则不太复杂,使用传统SQL排序规则而不是Windows排序规则,这样的扫描性能会更好。除了排序,除了建议的全文搜索之外,没有什么其他的事情可以做。