代码之家  ›  专栏  ›  技术社区  ›  pagra

当没有要检索的内容时,SQL Server请求非常慢?

  •  1
  • pagra  · 技术社区  · 14 年前

    在非常简单的条件下,“SQL Server Express 2005”将面临一个奇怪的性能问题。

    我们有一个表,列为[时间戳]、[ID]、[值]。 并且在[Timestamp]+[ID]上只有一个主唯一索引。

    该表包含约68000.000条记录。

    请求是: 从表中选择前1个时间戳,其中id=1234按时间戳排序

    如果此ID至少有一个记录,则在几毫秒内给出结果。 如果有 记录此ID。结果至少在30秒内给出!!!!

    我们尝试了许多其他类似的简单请求,一旦我们没有ID的对应记录,处理时间就非常长。

    你有什么解释和想法来避免这个吗?

    2 回复  |  直到 8 年前
        1
  •  1
  •   dkretz    14 年前

    按什么排序的前1个?

    如果它找到一条记录,它必须扫描整个表以查找更多记录,因为您没有 ID的索引。

    如果是这样,但想要“按时间戳排序”,它仍然会进行表扫描,因为它不知道时间戳索引中的ID是唯一的(即使它可能对您有意义,因为该ID被声明为唯一的,比如说-是吗?如果它不是自己的唯一索引,或者作为多列索引中的第一个字段,该怎么办?-或者它们都是单调增加的,比如说——它们是吗?)

        2
  •  0
  •   Dan Puzey    14 年前

    如果ID是唯一的ID,则 ORDER BY 不需要-只要在那个字段上有一个索引就足够了。