【发布时间】:2015-03-04 07:25:54
【问题描述】:
我兴致勃勃地把“查询计划”链接https://www.sqlite.org/queryplanner.html红了。
我还是 sqlite3 的初学者,我想问一个关于“lookup by rowid”技术性能的问题。
文档说对 rowid 进行了 bsearch,在我的例子中,我使用 PK 作为 rowid。
我使用具有稀疏 PK 值的表,一旦构建了这些表,它们就不再更改,不再插入/删除。我不知道是否有任何 API 可以“关闭”一个表,即使其不再可修改。
然后我需要在某些列的表格上构建一些索引。该文档说,在索引中搜索时,我们在 INDEX 上进行主 bsearch,然后我们得到一个 rowid,然后我们在 ROWID 索引上进行辅助 bsearch 以找到该行。
由于在构建索引时 tabke 是“关闭”的,因此优化器可以不存储 rowid 而是存储 row_index 以避免辅助 bsearch。
========================================
沿着这条线,如果不使用 PK,让 rowid 在我的表构造期间 1 比 1 增长,从它关闭并在其上创建 INDEX 时,在 INDEX bsearch 匹配上找到的 rowid 是否用作表中的索引避免二次搜索,如果可以的话,我可以用这种方式组织我的表格。
提前感谢任何建议 干杯, 披
【问题讨论】:
标签: sqlite database-performance