SELECT DISTINCT如此之快?

时间:2010-12-28 00:15:24

标签: database optimization sqlite

  

可能重复:
  SQL — How is DISTINCT so fast without an index?

您好,

我有一个数据库,里面有一个名为'links'的表,其中有6亿行在SQLite中。数据库中有2列 - “src”列和“dest”列。目前没有指数。

src和dest之间有相当多的公共值,但也有相当数量的重复行。

我要做的第一件事是删除所有重复的行,然后对结果执行一些额外的处理,但是我遇到了一些奇怪的问题。

首先,SELECT * FROM链接WHERE src = 434923 AND dest = 5010182。现在这会很快返回一个结果,然后需要很长时间才能运行,因为我假设它正在600米行的其余部分执行表扫描。

但是,如果我执行SELECT DISTINCT * FROM链接,那么它会立即开始快速返回行。问题是:这怎么可能?当然,对于每一行,必须将该行与表中的所有其他行进行比较,但这需要表格中的其余行的表格扫描,应该需要很长时间!

为什么SELECT DISTINCT比标准SELECT快得多?

1 个答案:

答案 0 :(得分:1)

重复的问题值得重复的答案:

为了更准确,一个查询不比另一个快。更准确地说,查询完成所花费的时间对于两个查询应该是相同的。不同之处在于使用DISTINCT的查询只返回更多行,因此它会以更快的速度接收行,因此响应速度更快。然而,在两者的引擎下发生的是相同的表扫描。 distinct查询具有一个数据结构,用于存储已返回的内容并过滤重复项。因此,它应该实际上需要更长的时间,直到查询完成但(返回的行)/时间更长,因为只有更多的行匹配。 (另请注意:某些查看者添加了查询结果限制,可以使不同的查询运行得更快(因为您达到了结果限制并停止)。)