美文网首页
MySQL索引小记

MySQL索引小记

作者: output | 来源:发表于2017-08-13 18:03 被阅读6次

先说一下存储引擎

MySQL5.1.X之前默认是MyISAM,从MySQL5.5.X开始,默认存储引擎为InnoDB Plugin

MyISAM

结构

每个MyISAM在磁盘上会将数据存储成三个文件,分别是:.frm文件存储表定义,.myd文件是数据文件,.myi文件是索引文件

特点

表级索、不支持事务支持全文索引

InnoDB

结构

.frm文件存储表定义,.idb文件存储数据和索引文件

特点

行级索、支持事务、不支持全文索引

如何选择

假如一个商城系统,在设计订单表和商品表时,如何选择引擎

订单表:一般后台操作,对事务要求高,查询少,用InnoDB

商品表:一般前台展示,查询多,用MyISAM

索引

常用索引类型一般为唯一性索引和普通索引,而索引方法有BTREE和HASH,常用BTREE,而不同引擎下对应的结构不同,那么其对应的索引也就不相同了

MyISAM下的索引

mysql_myisam01.png

MyISAM引擎使用B+Tree作为索引结构,叶子节点的data域存放的是数据记录的地址,Col1为主键,上图是主索引的原理图

mysql_myisam02.png

Col2建立的一个辅助索引,上图是基索引的原理图
MyISAM的这种索引方式叫做非聚集索引,即索引和数据分开放

InnoDB下的索引

mysql_innodb01.png

InnoDB也使用B+Tree,但实现方式与MyISAM不同,InnoDB的数据文件本身就是索引文件,上图是Col1作为主键的主索引的原理图

mysql_innodb02.png

InnoDB的辅助索引data域存储相应记录主键的值而不是地址,即InnoDB的所有辅助索引都引用主键作为data域,上图为col3的辅助索引
像InnoDB这样数据和索引都放在同一文件叫做聚集索引,这种实现方式使得按主键的搜索十分高效,但是辅助索引搜索需要检索两遍索引:首先检索辅助索引获得主键,然后用主键到主索引中检索获得记录

关于聚集索引

  1. 默认拿主键作为聚集索引
  2. 如果没有主键,会去取非空唯一的索引作为聚集索引
  3. 如果上面都没有,Innodb自己去维护一个唯一索引

总结

优缺点

优点:
提高检索速度,降低IO、CPU消耗
缺点:
占空间,索引字段更新会有性能损耗

用索引

  1. 单表单库,出现查询性能瓶颈,大概在500万
  1. 排序字段
  1. 分组字段

不用索引

  1. 频繁更新的字段不适合建立索引
  2. where没有使用的字段
  3. 表的数据很少
  4. 数据重复且分布均衡的字段,如性别字段状态字段
  5. 参与列计算的时候不适合建立索引

优化思路

  1. 建索引
  2. sql解析
  3. 缓存
  4. 拆分(分库,分表(垂直,水平))
  5. scale out 水平扩展 增加机器 集群负载 (建议)
    scale up 提高服务器性能,增加CPU,增加磁盘,SSD (很有钱的基础上面)

扩展阅读

  1. MySQL索引背后的数据结构及算法原理
  2. B+/-Tree原理及mysql的索引分析

相关文章

  • MySQL索引小记

    先说一下存储引擎 MySQL5.1.X之前默认是MyISAM,从MySQL5.5.X开始,默认存储引擎为InnoD...

  • MySQL索引及查询优化书目录

    MySQL索引的原理之索引目的 MySQL索引的原理之索引原理 MySQL索引的原理之索引的类型 MySQL索引的...

  • MySQL索引概念小记

    索引是存储引擎用于快速找到记录的一种数据结构。 索引可以包含一个列或多个列的值,多个列的话,顺序很关键。 大多数索...

  • 高性能的索引策略

    MySQL查询基础-查询执行过程 MySQL聚簇索引 MySQL覆盖索引 MySQL索引扫描排序 MySQL冗余和...

  • MySQL索引的使用

    MySQL索引 MySQL索引可以快速提高MySQL的检索速度。索引分单列索引和组合索引单列索引:即一个索引只包含...

  • Mysql索引与锁

    本文以Mysql5.7为例测试。 1:mysql索引方法 Mysql的索引方法分为btree索引和hash索引。 ...

  • 索引(二)

    mysql索引的新手入门详解mysql索引之三:索引使用注意规则 索引(Index)是帮助 MySQL 高效获取数...

  • MySQL 索引分类

    MySQL索引的分类(根据数据结构) 索引的本质 MySQL官方对索引的定义为:索引(Index)是帮助MySQL...

  • MySQL--索引

    MySQL索引 查看索引 创建索引 创建唯一索引 创建主键索引 删除索引 删除主键 MySQL视图 创建视图 删除...

  • mysql索引

    索引 mysql索引的建立对于mysql的高效运行是很重要的,索引可以大大提高mysql的检索速度。索引分单列索引...

网友评论

      本文标题:MySQL索引小记

      本文链接:https://www.haomeiwen.com/subject/dvyerxtx.html