mysql 索引的代价(InnoDB)

导读:本篇文章讲解 mysql 索引的代价(InnoDB),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

虽然索引是个好东西,但是不能肆意创建

一、空间上的代价

这个是显而易见的,因为每建立一个索引,都要为他建立一颗B+树。每一颗B+树的每一个节点都是一个数据页。一个数据页默认会占用16KB的存储空间,而一颗很大的B+树由许多数据页组成,这将占用很大的一片存储空间。

为节省空间InnoDB存储引擎只为主键生成默认的索引叫做主键索引或者是聚簇索引,而二级索引需要用户在需要的时候去主动创建,并且二级索引不会存储完整的信息,而是在叶子节点上只存储二级索引值和主键值,并通过回表的方式得到其他列的值。

二、时间上的代价

每当对表中的数据进行增删改(注意没有查询)操作时,都需要修改各个B+树索引。B+树中的每层节点都按照索引列的值从小到大的顺序排序组成了双向列表,无论是叶子节点中的记录还是内节点中的记录(也就是无论是用户记录还是目录项记录),都按照索引列的值从小到大的顺序形成了一个单向列表。而增删改操作可能会对节点和记录的排序造成破坏,所以存储引擎需要额外的时间进行页面分裂、页面回收等操作,以维护节点和记录的排序。
还有一点就是在查询语句前,首先要生成一个执行计划。一条查询语句在执行过程中最多使用一个二级索引,在生成执行计划时需要计算使用不同索引执行查询时的成本,选取最优的索引,此时如果建立太多的索引,可能会导致成本分析过程耗时太多,从而影响查询语句的执行性能。

综上所述,在一个表里建立的索引越多,占用的存储空间也就越多,在增删改或者生成执行计划时性能也就越差。

创作不易,点个赞吧~👍

最后的最后送大家一句话

白驹过隙,沧海桑田

与君共勉

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/99526.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!