0
点赞
收藏
分享

微信扫一扫

MySQL的引擎、索引、视图

树下的老石头 2022-04-28 阅读 84
数据库

MySQL的引擎、索引、视图

MySQL引擎

MySQL中的不同的引擎使得数据可以用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能。

说说数据库中两个常见的引擎:

  1. Mylsam
    MySQL的默认引擎,它没有提供对数据库事务的支持,也不支持行级锁和外键,因此当INSERT或UPDATE数据时即写操作需要锁定整个表,效率便会低一些。使用场景:MyIASM中存储了表的行数,于是SELECT COUNT(*)
    FROM TABLE时只需要直接读取已经保存好的值而不需要进行全表扫描。如果表的读操作远远多于写操作且不需要数据库事务的支持,那么MyIASM也是很好的选择。

  2. InnoDB
    InnoDB是一个事务型的存储引擎,有行级锁定和外键约束。提供对数据库ACID事务的支持,并且实现了SQL标准的四种隔离级别。使用场景:经常更新的表,适合处理多重并发的更新请求。

MySQL索引

索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。

DB在执行一条Sql语句的时候,默认的方式是根据搜索条件进行全表扫描,遇到匹配条件的就加入搜索结果集合。如果我们对某一字段增加索引,查询时就会先去索引列表中一次定位到特定值的行数,大大减少遍历匹配的行数,所以能明显增加查询的速度。

索引的优缺点

  • 优点
  • 缺点

底层实现

B+树如下:
在这里插入图片描述

  • 为什么MySQL要用B+树做索引?
  1. 引入B-树是为了解决AVL树高度太大,会导致读写次数太多,导致的查询耗时的问题,因为B-树的特征,两层B-树就能存2000千多万的索引。
  2. B+树只在子节点存索引解决的问题:
    A、磁盘读写代价更低:B±tree的内部结点并没有指向关键字具体信息的指针。因此其内部结点相对B 树更小。如果把所有同一内部结点的关键字存放在同一盘块中,那么盘块所能容纳的关键字数量也越多。一次性读入内存中的需要查找的关键字也就越多。相对来说IO读写次数也就降低了。
    B、查询效率更加稳定:由于非终结点并不是最终指向文件内容的结点,而只是叶子结点中关键字的索引。所以任何关键字的查找必须走一条从根结点到叶子结点的路。所有关键字查询的路径长度相同,导致每一个数据的查询效率相当。
    C、方便查询整个表:B+树只要遍历叶子节点就可以实现整棵树的遍历。
  3. 叶子结点之间增加指针解决的问题:更高效率的范围查找。比如上图中,我要查找27~30的索引,那么通过子节点间的索引便可以完成这个任务,而不需要重新找。
  4. 还可以引入B*树,即在父节点之间也增加一个指针,这个解决的问题是:使得空间利用率更高

MySQL视图

视图是一个虚拟表,视图并不在数据库中存储数据值,数据库中只在数据字典中存储对视图的定义。

说人话就是:视图是数据库创建出来的虚表,相当于是对一些表的拼接,方便做查询操作。它的数据不会以表的形式存放在数据库中,但是又可以像真的表那样对它使用SELECT、INSERT、UPDATE和DELETE操作,且相应的基表也会发生改变。

数据量大的时候尽量避免使用视图。

举报

相关推荐

0 条评论