SQL 数据库中查询的最短时间顺序是多少?
what is the minimum time Order of a query in SQL databases?
我想知道给定 SQL
(特别是 SQLite
)数据库(有 n 条记录)的最短查询时间是多少。
我知道 full table scan
是 O(n)
并且对于索引列(和 RowId
)它是 O(log(n))
.
第一个问题:有没有时间小于O(log(n))
的情况?
第二个问题:为什么查询 RowId
(SELECT *FROM table_01 WHERE rowid='234'
) 也是 O(log(n))?如果它 (RowId
) 从 1 到 n 排序,我 逻辑上 期望 SQL
可以 立即 找到具有给定的 RowId
查找特定行需要搜索。 (不一定每个 rowid 都存在,所以数据库需要查找。)乐观的情况,甚至是平均情况,应该比 log(n) 快得多,但最坏的情况不可能,因为它需要搜索列表。
如果要从索引列(SELECT MIN(x) FROM table
)中检索最小值或最大值,数据库can simply read the first or last value,时间复杂度为O(1)。
索引存储为 B 树,索引列作为键。
表存储为 B 树,以 rowid
作为键,因此搜索 rowid
与在索引中搜索值一样快。
我想知道给定 SQL
(特别是 SQLite
)数据库(有 n 条记录)的最短查询时间是多少。
我知道 full table scan
是 O(n)
并且对于索引列(和 RowId
)它是 O(log(n))
.
第一个问题:有没有时间小于O(log(n))
的情况?
第二个问题:为什么查询 RowId
(SELECT *FROM table_01 WHERE rowid='234'
) 也是 O(log(n))?如果它 (RowId
) 从 1 到 n 排序,我 逻辑上 期望 SQL
可以 立即 找到具有给定的 RowId
查找特定行需要搜索。 (不一定每个 rowid 都存在,所以数据库需要查找。)乐观的情况,甚至是平均情况,应该比 log(n) 快得多,但最坏的情况不可能,因为它需要搜索列表。
如果要从索引列(SELECT MIN(x) FROM table
)中检索最小值或最大值,数据库can simply read the first or last value,时间复杂度为O(1)。
索引存储为 B 树,索引列作为键。
表存储为 B 树,以 rowid
作为键,因此搜索 rowid
与在索引中搜索值一样快。