SQL数据库中查询的最小时间顺序是多少?

时间:2017-11-30 03:14:25

标签: sql algorithm sqlite database-optimization

我想知道给定SQL(特别是SQLite)数据库(具有n条记录)的最短查询时间是多少。 我知道full table scanO(n),而对于已建立索引的列(以及RowId),它为O(log(n))

第一个问题:是否存在时间小于O(log(n))的情况?

第二个问题:为什么查询RowIdSELECT *FROM table_01 WHERE rowid='234')也是O(log(n))??如果它(RowId)从1到n排序我逻辑期望SQL可以立即找到具有给定{{1}的行}

2 个答案:

答案 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与搜索索引中的值一样快。