MySQL索引 (Hash表和B-Tree比较)(MyISAM和InnoDB比较)

索引数据结构

索引是帮助MySQL高效获取数据的排好序的数据结构

Hash表 和 B-Tree 比较

  • Hash通过对索引的hash快速获取地址值直接获取数据,在对索引的查询效率上高于B-Tree
  • Hash表通过List和红黑树对数据进行查询
  • IO查询次数上方面:红黑树是二叉树,数据量大的情况下,树的层数高于B-Tree。使用Hash存取结构,会导致IO次数过高,而B-Tree只需要很少的查询次数。
  • 数据量很少的时候:Hash查找只是查找单个值,但是数据库查找离不开范围查找,例如select * from table where id > 10,这种情况下Hash能够快速的查到id=10
    的这个值,但是并不知道id > 10的值又有哪些。而B+Treede叶子节点的连续指针可以快速方便的进行范围查找。

MyISAM 和 InnoDB比较

  • 事务支持: MyISAM不支持事务,InnoDB支持事务
  • 外键: MyISAM不支持外键,InnoDB支持外键
  • 索引:MyISAM是非聚集索引(索引和数据不在同一位置存储),索引查找到的值是磁盘中的地址,通过地址找到数据,是两次查询也就是回表。InnoDB说是聚集索引(索引和数据在一起存储),B+Tree子节点的数据就是所要查找的数据而不是数据的地址,这种方式可以少一次查询,提高查询效率。因此InnoDB一定要有主键,建议是自增主键,因为占用存储较少,提高存储量。
  • 具体行数:InnoDB不保存表的具体行数,select count(*) from table需要扫描全表。MyISAM用一个变量保存了表的行数。
  • 锁: InnoDB最小锁粒度是行锁,MyISAM最小锁粒度是表锁。一个更新语句会锁住整张表,导致其他查询和更新都会被阻塞。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值