【发布时间】:2010-12-28 08:21:12
【问题描述】:
嗨,
我有一个数据库,其中有一个名为“links”的表,在 SQLite 中有 6 亿行。数据库中有 2 列 - “src”列和“dest”列。目前没有索引。
在 src 和 dest 之间有相当数量的公共值,但也有相当数量的重复行。
我要做的第一件事是删除所有重复的行,然后对结果进行一些额外的处理,但是我遇到了一些奇怪的问题。
首先,SELECT * FROM links WHERE src=434923 AND dest=5010182。现在这会很快返回一个结果,然后需要很长时间才能运行,因为我假设它正在对其余 600m 行执行表扫描。
但是,如果我执行 SELECT DISTINCT * FROM 链接,那么它会立即开始快速返回行。问题是:这怎么可能?当然,对于每一行,该行都必须与表中的所有其他行进行比较,但这需要对表中剩余的行进行表扫描,这应该需要很长时间!
知道为什么 SELECT DISTINCT 比标准 SELECT 快得多吗?
【问题讨论】:
-
你为什么又问完全相同的问题,而且来自两个同名的不同帐户???
-
老实说,我不知道。我之前尝试过发布问题,但这里的服务器出现错误。然后我试图找到原始问题,但它没有在我的帐户下注册(它仍然没有)并搜索它(找不到它)所以我认为它没有发布。为错误道歉。
标签: database optimization sqlite