【问题标题】:Slow query performance when searching for a particular value, but fast with a different value on the same column搜索特定值时查询性能较慢,但在同一列上使用不同值时查询性能较快
【发布时间】:2018-02-08 14:52:35
【问题描述】:

有一个由前端应用程序执行的 SQL Server 2017 选择语句。该查询具有三个连接和 UNION。每个 Join 语句都有一个子句,其中NAME LIKE '%ibm%'

但是,当我将 '%ibm%' 更改为 NAME LIKE %services% 时,它会像往常一样快速运行。

我重建了所有表的所有索引,并在列上创建了缺失的统计信息。这并没有改变查询性能。

【问题讨论】:

  • 当你有一个像这样的前导通配符时,索引会变得无能为力。您的查询是 nonSARGable,因此性能将是一个挑战。

标签: sql-server sql-like query-performance database-indexes


【解决方案1】:

性能(也取决于确切的查询)将取决于 LIKE 中的特定值。

由于特定查询为特定值返回成功的次数(LIKE 为真),将增加连接/联合中的行数。

【讨论】:

  • 我不明白你在说什么。但是返回的行数不是性能问题。
  • 我也使用了 SET TIME STATISTICS 和 IO STATISTICS,除了一张表外,读取次数没有太大差异。
  • 最终的行数不是性能问题,但是如果在查询中您在给出影响性能的最终结果之前执行子查询、连接或联合,这就是为什么 (根据问题)它会根据值而变化
猜你喜欢
  • 2012-12-27
  • 1970-01-01
  • 2015-03-25
  • 1970-01-01
  • 2023-03-30
  • 2018-09-28
  • 2015-08-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多