Skip to content

Latest commit

 

History

History
45 lines (23 loc) · 1.23 KB

拓展-数据库.md

File metadata and controls

45 lines (23 loc) · 1.23 KB

SQLite 中 withoutrowid 的使用场景是什么

  • rowid 的作用、SQLite 中主键的实现方式

  • B Tree、B+Tree 在 SQLite 中的用途

    • B+Tree

      • 是一种多路平衡查找树

      • 非叶子节点只存键,叶子节点才存值

      • 查找时间复杂度是:O(Log N)

    • B Tree

      • 是一种多路平衡查找树

      • 键与值,存储在所有节点

      • 查找时间复杂度是:O(1) - O(Log N)

  • 为什么要使用 without rowid

    • 存在的问题

      • 只有通过 rowid 查询,时间复杂度才能达到 O(Log N),如果业务上,不能提供数值类型的主键,rowid 一般都是自动生成和自动增长的,业务代码很难提前拿到 rowid,并且作为查询条件

      • 如果使用非 rowid 的主键查询,时间复杂度是 O(2Log N)

      • 每创建一个索引,就要额外存储大量记录,浪费存储空间

    • without rowid 表

      • 通过 without rowid 关键字创建的表,不会自动添加 rowid 键

      • 限制:

        • 必须自己指定非 INTEGER 类型主键或联合主键

        • 主键一列不能是null

        • 不能使用 AUTOINCREMENT 机制

  • rowid 表的查询效率优化