文章目录
- 一、慢查询优化合理设计
一、慢查询优化合理设计
- 索引种类
- 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子句中的字段不该创建索引