1

根据我的谷歌,sqlite 不支持聚集索引(参见四:聚集索引),但我不明白的是:

这意味着如果您的索引是顺序 INTEGER,则记录按 INTEGER 顺序物理布局在数据库中,1 然后 2 然后 3。

  1. 如果从包含顺序 int 索引的表中删除了一些记录,那么新插入的记录应该放在哪里?据我所知,记录 int ID 只会增长,所以记录会附加到尾部,对吗?这是否意味着删除的地方被浪费了?
  2. 在没有顺序INTEGER索引的情况下,sqlite表是堆表吗?即记录将放置在第一次找到可用空间的位置。
4

1 回答 1

0

1) 对了,tail 会发生记录。是的,如果数据库引擎不能轻松地重用它,删除的地方可能会被浪费。使用命令VACUUM压缩数据库时,将删除未使用的位置。

2) 是的,这样的 SQL 表是堆表。但是(任何类型的)索引都是精确地用来访问数据的,就好像记录已经排序一样。索引是链接到记录的排序值。但新记录不一定放在最先找到空闲空间的地方。考虑到写入二进制数据的未使用空间和时间(在队列中发生比在中间插入更快),它们被放置在数据库引擎填充的位置。

于 2011-03-29T07:42:49.123 回答