我想知道给定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
可以立即找到具有给定{{1}的行}
答案 0 :(得分:0)
查找特定行需要搜索。 (并非每个rowid都必须存在,因此数据库需要查看。)乐观情况,甚至是普通情况,应该比log(n)快得多,但最坏的情况不可能,因为它需要搜索列表。
答案 1 :(得分:0)
如果要从索引列(SELECT MIN(x) FROM table
)中检索最小值或最大值,则数据库为can simply read the first or last value,时间为O(1)。
索引存储为B树,索引列为键
表存储为B树,以rowid
为键,因此搜索rowid
与搜索索引中的值一样快。