我们在一个非常简单的条件下遇到了“SQL Server Express 2005”的奇怪性能问题。
我们有一个表格:[timestamp],[id],[value]列。 并且[timestamp] + [id]上只有一个主要唯一索引。
该表包含大约68.000.000条记录。
请求是: SELECT TOP 1时间戳FROM表WHERE id = 1234 ORDER BY timestamp
如果此id至少有一条记录,则结果将在几毫秒内给出。 如果此id的 no 记录,则结果至少在30秒内给出!
我们尝试了许多其他简单的类似请求,只要我们没有相应的id记录,处理时间就非常长。
你有什么解释和想法可以避免这种情况吗?
答案 0 :(得分:1)
TOP 1 ORDER by what?
如果找到一条记录,它必须扫描整个表以查找更多记录,因为您没有 id。的索引。
如果你这样做了,但想要“ORDER BY timestamp”,它仍然会进行表扫描,因为它不知道id在时间戳索引中是唯一的(尽管它可能对你有意义,因为id被声明为唯一的,说 - 是吗?如果它不是一个独特的索引,或者作为多列索引中的第一个字段? - 或者它们都单调增加,比如说 - 是吗?)
答案 1 :(得分:0)
如果ID是唯一ID,则不需要ORDER BY
- 只有该字段的索引就足够了。