您好,
我有一个数据库,里面有一个名为'links'的表,其中有6亿行在SQLite中。数据库中有2列 - “src”列和“dest”列。目前没有指数。
src和dest之间有相当多的公共值,但也有相当数量的重复行。
我要做的第一件事是删除所有重复的行,然后对结果执行一些额外的处理,但是我遇到了一些奇怪的问题。
首先,SELECT * FROM链接WHERE src = 434923 AND dest = 5010182。现在这会很快返回一个结果,然后需要很长时间才能运行,因为我假设它正在600米行的其余部分执行表扫描。
但是,如果我执行SELECT DISTINCT * FROM链接,那么它会立即开始快速返回行。问题是:这怎么可能?当然,对于每一行,必须将该行与表中的所有其他行进行比较,但这需要表格中的其余行的表格扫描,应该需要很长时间!
为什么SELECT DISTINCT比标准SELECT快得多?
答案 0 :(得分:1)
重复的问题值得重复的答案:
为了更准确,一个查询不比另一个快。更准确地说,查询完成所花费的时间对于两个查询应该是相同的。不同之处在于使用DISTINCT的查询只返回更多行,因此它会以更快的速度接收行,因此响应速度更快。然而,在两者的引擎下发生的是相同的表扫描。 distinct查询具有一个数据结构,用于存储已返回的内容并过滤重复项。因此,它应该实际上需要更长的时间,直到查询完成但(返回的行)/时间更长,因为只有更多的行匹配。 (另请注意:某些查看者添加了查询结果限制,可以使不同的查询运行得更快(因为您达到了结果限制并停止)。)