码迷,mamicode.com
首页 > 数据库 > 详细

小白白话技术之MYSQL索引

时间:2020-03-01 20:19:32      阅读:92      评论:0      收藏:0      [点我收藏+]

标签:insert   其他   block   mic   查找   一个   存储   upd   解释   

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

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

 

 技术图片

 

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

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

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

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

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

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

小白白话技术之MYSQL索引

标签:insert   其他   block   mic   查找   一个   存储   upd   解释   

原文地址:https://www.cnblogs.com/xiaobaishouzha/p/12391239.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!