2.mysql索引

mysql索引
  1. 索引是一种特殊的文件(表空间的一个组成部分),包含着对数据表里所有记录的引用指针(依靠数据结构和算法来组织数据,快速检索出需要的数据的数据结构),最常见是使用哈希表,b+树作为索引,本质(通过不断缩小想要获取数据的范围,来筛选想要的结果,同时把随机的数据变成顺序的数据)
  2. mysql引擎:(存在两种引擎 Innodb和myisam)
    • 共同点:都是使用b+树的结构存储数据
    • Innodb:

      存在两种索引:聚簇索引(主键索引),非聚簇索引(辅助索引),本质是一种(数据存储方式)
      聚簇索引:每个表只能有一个主键索引,b+树结构,行数据和索引存储在一起,辅助索引树只存储辅助键和主索引ID,主键索引树和辅助索引树几乎是两种类型的树
      非聚集索引:每个表可以有多个,b+树结构,主索引树在叶子节点存储指向真正数据行的指针,而非主索引ID
      回表:先在辅助索引树中检索数据,获取主索引ID,然后在主键索引树中检索这个ID的记录
      img

    • Myisam

      使用非聚集索引方式,即数据和索引落在两个不同的文件,在建表时以主键来建立主索引树,树的叶子节点存储对应数据的物理地址
      img

    • 注意点
      1. Innodb和myisam都使用了非聚簇索引,但是实现方式不一样,存在指针指向的索引特指myisam的实现,对于Innodb的非聚簇实现而是采取回表的方式
      2. InnoDB主键聚簇索引B+树的节点存储了主键和数据行,MyISM非聚簇索引B+树存储了主键和指向data的指针
        img
  3. 索引的优缺点
    1. 索引不是万能的,加快数据的检索,但是会使数据操作变慢,每修改数据记录,索引就会刷新一次,同一表的索引总数限制为16个]
    2. 实际上索引也是一张表,表中保存了主键与索引字段,并指向实体类的记录,索引也是占用空间的
  4. 索引有哪几种类型?
    • 普通索引

      最基本的索引,没有任何限制,值可以为空,仅加速查询
      创建索引:Create INDEDX index_name ON table_name(column(length))
      修改索引:ALTER TABLE table_name ADD INDEX index_name ON (column(length))

    • 唯一索引

      与普通索引类似,区别:索引列的值必须是唯一的,允许为空。联合索引的话,列的组合必须是唯一的(加速查询+列值唯一(可为空))
      创建唯一索引: Create UNIQUE INDEX index_name ON table_name(column(length))
      修改索引:ALTER TABLE table_name ADD UNIQUE index_name ON (column(length))

    • 主键索引

      一种特殊的唯一索引,一个表只能有一个主键,不允许为空。(加速查询+列值唯一(不可能有Null) + 表中只有一个) 一般创建表时有同时创建主键索引

    • 联合索引

      指在多个字段上创建的索引,只有当在查询条件中使用创建索引时的第一个字段,索引才使用,遵循最左前缀集合 效率大于索引合并

    • 全文索引(mysql5.6以前InnoDB数据表不支持全文索引)

      主要用来查找文本中的关键字,而不是精确的数值比较,只能用于CHAR,VARCHAR,TEXT创建

  5. 创建索引有什么原则
    • 针对sql语句里的where,order by条件及 group by来设计索引,后面跟的字段都是联合索引的最左侧开始部分字段
    • 尽量使用基数比较大的字段,就是值比较多的字段,那样才能发挥出b+树快速二分查找的优势,以及对于比较长的字符串类型的列,可以使用最左前缀索引
    • 索引列不能套函数,避免索引失效
    • 范围查询的字段用到了索引,接下来的条件都不能用索引,尽量用作最后那个
    • 针对低基数字段筛选+排序可以设计辅助索引
  6. 什么是最左前缀原则,什么事最左匹配原则
    • 最左前缀原则:
      img
    • 最左匹配原则: 在创建多列索引时,要根据业务需求,where子句中使用最频繁的一列放在最左边
  7. 引用文章:

    https://www.cnblogs.com/williamjie/p/11081081.html
    https://blog.csdn.net/m0_45406092/article/details/111939737
    https://blog.csdn.net/zhanghao143lina/article/details/128899036
    https://juejin.cn/post/6844904062329028621

本文作者:乐天

本文链接:https://www.cnblogs.com/blackamon/p/17109570.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   乐天--  阅读(19)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起