小白白话技术之MYSQL索引

这是一篇关于MYSQL索引技术的白话介绍篇,不知道直白的语言是否有助于你更容易理解MYSQL的索引技术。

什么是索引,为什么要用索引,要回答这俩个问题,我们可以先提出MYSQL使用上有什么痛点,比如说MYSQL的性能,更具体举例的话,比如说MYSQL的查询性能,如何能更快的查询到需要的数据,就是MYSQL的索引要解决的问题。MYSQL的索引是一种数据结构,通过这种数据结构能够更快的实现数据查找,所以我们要尽可能的使用索引来提高我们查询的性能。下面这个图说明了MYSQL中索引的定位

 小白白话技术之MYSQL索引

数据也就是指数据库里存储的数据,这些数据通过一定规则创建索引数据,当我们查询是会优先利用索引数据进行查找,为什么索引数据查找数据更快呢?这就是我们下面要解释的。

前面我们说过索引是一种数据结构,那么索引数据就是利用这种数据结构对数据库的数据进行加工存储,从而使得索引数据具备对应数据结构的特点。比如B-TREE,哈希等。

快速查找算法中,B-TREE和哈希适合特定场景的查询应用,索引MYSQL中有这俩种数据结构的索引,当然还有其他的。B-TREE创建时会按照顺序存储,这有利于快速查找。

在说下怎么才能利用好索引,单独的列可以利用索引 ,如果把单独的列放到表达式中就无法利用到索引了;前缀列可以利用到索引;多个列创建组合索引时,要注意顺序,不同的顺序查询效率是不一样的。

另外要说下聚合索引,聚合索引其实是数据的一种存储方式,比如在innodb中,是把索引和数据一起保存起来。需要注意的是,一个表中只能有一个聚合索引,因为数据只能存储一份。再说下覆盖索引,如果一个索引把查询字段也覆盖,那么这个索引可以称为覆盖索引,如果覆盖索引可以把数据之间查询到,就可以避免访问表,那么可以极大提高性能,但是mysql中只有b-tree索引支持覆盖索引。

那么索引就一定好吗,索引也有弊端,比如说创建索引需要时间,对于很小的表来说,直接全表扫描就可以了,完全没有必要。对于超级大的表,索引太大导致对性能的影响太大而降低性能,也不建议用索引。所以只有适当数据量的表考虑索引,当然我们有很多表其实也会太大或太小。索引还有 弊端吗,有,那就是对insert\delete\update会有性能的影响。

相关推荐