• mysql常用的存储引擎


    索引分为两种,聚集索引和非聚集索引

    聚集索引指的是叶子顺序和物理地址顺序一致

    非聚集索引指的是只有叶子顺序是连接着的,物理地址则不一致

    常用的存储引擎

    mysql常用的存储引擎有Innodb和Myisam,都是基于B+树实现的。

    Innodb

    1.Innodb默认聚集索引,因此他的索引文件就是包含数据文件内容,索引叶子节点直接保存数据(.idb数据文件)

    (1).主键就是聚集索引

    (2).在没有主键的情况下会将唯一非空索引作为聚集索引

    (3).如果都没有的情况下就会在内部生成隐式主键作为聚集索引,这个列是一个6字节(48位)的整数作为聚集索引

    2.Innodb默认是行级锁,行级锁是基于索引实现的,因此SQL中如果没有使用到索引的情况下就不会使用行级锁,而会换为使用表级锁,从而导致性能下降

    3.支持事务

    4.需要维护MVCC一致性(多版本并发控制),因此多出来了维护成本

     

     Myisam

    Myisam属于非聚集索引,因此他的数据文件内容和索引文件是分离的,索引叶子节点保存数据指针(.myd数据文件,.myi索引文件)

    1.不支持事务,崩溃后无法安全恢复

    2.比Innodb的查询速度更快

    3.Myisam使用的是表级锁,在同时有读和写的操作时候,即使读锁比写锁先进到锁等待队列,写锁也会先插入到读锁的前面先进行写的操作,因此在有大量写的操作时,Myisam可能会造成读取数据大量在阻塞的情况

    总结

    1.Innodb主键索引叫聚簇索引、其他索引都叫辅助索引(二级索引,也可以叫非聚簇索引),当使用辅助索引时,会先从辅助索引中找到对应的行key,然后再根据key去主键索引找对应的行数据,造成两次索引查找。

    2.Myisam的主键索引和辅助索引都是非聚簇索引,非聚簇索引的特性就是叶子节点不会保存行数据,而是保存数据记录的地址,再直接去数据文件中找。

     

  • 相关阅读:
    linux 安装软件的方式
    git 基本操作
    交叉编译
    windows下 打印机打印操作类 VS2015
    VS2015 下 unicode 字符转换类
    C++ 多线程日志类的使用
    编译模板实例化
    C++中如何使用switch字符串
    linux下静态库与动态库
    jsoncpp 解码编码 中文为空 乱码问题
  • 原文地址:https://www.cnblogs.com/nicori/p/12170748.html
Copyright © 2020-2023  润新知