文章目录

  • 一、慢查询优化合理设计


一、慢查询优化合理设计
  • 索引种类
  • B-tree索引
  • mysql中使用最频繁的索引类型
  • Hash索引
  • 检索效率远高于B-tree索引,可以一次定位
  • Fulltext【全文索引】
  • 只有MyISAM引擎支持
  • 目前仅char,varchar,text这三种类型可以
  • 为了解决WHERE name like"%xxx%"这类针对文本的模糊查询效率较低的问题。
  • R-tree索引
  • 比较少见,主要用于空间数据检索
  • B-tree索引
  • 树的高度一致,且所有数据都是存放在叶子节点的
  • 每次磁盘的读取就是一次IO
  • 有序,一般都是二分查找法
  • 非叶子节点也是有数据的
  • 磁盘块,一致,如果data越来越大,那么key就会越来越少,相对的树的高度就会越来越高,查找的深度也就越来越深,读取的IO也就越来越多
  • B+tree索引
  • 非叶子节点上没有数据了,只存储键值信息
  • Innodb就是使用B+tree来实现的索引结构【根节点常内存,减少一次IO】
  • 磁盘块,一致,非叶子节点不存储数据,那么每个磁盘就能存大量的key,相对的树的高度就会低的多,查找的深度也就浅的多,读取的IO也就少
  • 所有的叶子节点都有链指针
  • 两个头指针:第一个指针指向根节点,第二个指针指向叶子节点的最小节点,这就造成了对于B+树查找就有两种算法:第一种就是主键范围查找和分页查找,第二种就是从根节点开始的随机查找
  • B+树索引又分为聚簇索引和辅助索引
  • 左图就是一个聚集索引
  • 右图是辅助索引,叶子节点存放的是主键索引,需要再一次根据主键索引,回表查询对应数据,也就是再一次查聚簇索引。
  • 如何判断是否需要创建索引
  • 较频繁的作为查询条件的字段应该创建索引
  • 唯一性太差的字段不适合单独创建索引,可以尝试复合索引
  • 更新非常频繁的字段不适合创建索引
  • 不会出现在where子句中的字段不该创建索引