Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.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 为什么查询时间如此不同?_Sql Server - Fatal编程技术网

Sql server 为什么查询时间如此不同?

Sql server 为什么查询时间如此不同?,sql-server,Sql Server,这个查询返回得非常慢 SELECT TOP 100 * FROM MyTable N WHERE (N.[Subject] LIKE '%not_postterm%') OR (N.[Content] LIKE '%not_postterm%') OR (N.[Subject] LIKE '%not_post_term%') OR (N.[Content] LIKE '%not_post_term%') 但这种情况很快就会恢复 SELECT TOP 100 *

这个查询返回得非常慢

SELECT TOP 100 *
FROM MyTable N
WHERE
    (N.[Subject] LIKE '%not_postterm%')
    OR (N.[Content] LIKE '%not_postterm%')
    OR (N.[Subject] LIKE '%not_post_term%')
    OR (N.[Content] LIKE '%not_post_term%')
但这种情况很快就会恢复

SELECT TOP 100 *
FROM MyTable N
WHERE
    (N.[Subject] LIKE '%postterm%')
    OR (N.[Content] LIKE '%postterm%')
    OR (N.[Subject] LIKE '%post_term%')
    OR (N.[Content] LIKE '%post_term%')
原因是因为通配符之间的字符串长度吗

为什么查询时间如此不同

这两个查询都将执行表扫描,或者扫描包含4个WHERE子句列的索引


但一旦找到第100个匹配行,这两个查询都将停止。因此,正在扫描的表或索引中匹配行的分布和位置将控制此查询的运行时间。

因为您在LIKE运算符中使用了前导%,这两个查询通常都会非常慢,因为没有索引可以用来加速它们,它们需要进行完整的表扫描:您是按这种顺序运行查询的吗?那么可能第一个查询已经加载了整个数据,所以第二个查询很快。尝试重新启动SQL Server,然后首先运行第二个查询-它仍然如此快吗?这是有意义的,因为第一个查询中的项比第二个查询中的项分散得多。谢谢