1.1 数据结构

sql型数据库通常使用B+树存储index(红黑树?存疑),相比B树,B+树所有数据节点都在最底层,并且每个节点都会存储下一个节点的指针,在between/>/<操作的时候可以获得很好的时间复杂度,优于B树(存疑)。

由于每次插入/删除操作都需要同时修改index,所以不合适的index反而会拖慢数据库性能。(例如插入n个数据,在没有索引时时间复杂度是O(n),有索引时时间复杂度是O(n*log(n)),耗时时间与索引数量近似成正比。)在查询操作远多于增删改操作时,index会获得较好的性能。


hash表可以丧心病狂地减少时间复杂度,当然也会丧心病狂地增加空间复杂度……文中没有详细说明hash表的使用场景,目测在表连接的时候hash表会获得较高的性能。

  CREATE TABLE t1(a,b);
  CREATE TABLE t2(c,d);
  -- Insert many rows into both t1 and t2
  SELECT * FROM t1, t2 WHERE a=c;

(from https://www.sqlite.org/optoverview.html)

对a和c使用hash表建立索引效率会提高很多(时间复杂度O(n))。然而根据sqlite官网上的介绍,这种情况下sqlite使用的是O(n*log(n))的索引,想不通。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值