MySQL索引概述及优缺点分析

索引是什么?

索引(Index)是帮助MySQL高效获取数据的数据结构,可以得到索引的本质:索引是数据结构

索引的目的在于提高查询效率,可以类比字典,如果要查"mysql"这个单词,我们肯定需要定位到m字母,然后往下找到y字母,再找到剩下的sql。如果没有索引,那么可能需要a–z这个样子去查找了。

可以简单理解为"索引是排好序的快速查找的数据结构"

在数据之外,数据库系统还维护者满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据。这样就可以在这些数据结构的基础上实现高级查找算法,这种数据结构就是索引。

在这里插入图片描述

最左边的物理地址通常对应的是硬盘文件。

为了加快Col2的查找,可以维护一个右边所示的二叉查找数,每个节点分别包含索引键值和一个指向对应数据揭记录物理地址的指针,这样就可以运用二叉查找在一定的复杂度内获取到相应数据,从而快速的检索出符合条件的记录。

为什么经常用到的是逻辑删除呢?因为云计算等会分析数据,你不用别人可能也会用;还有就是为了索引

为什么查询快增删慢?在数据库里面,你需要修改数据的时候并不只是会修改数据还会修改索引。

一般来说索引本身很大,不可能全部存储在内存中,因此索引往往以索引文件的形式存储在磁盘上。

我们平常所说的索引,如果没有特别指明,都是指B树(多路搜索树,并不是二叉的)结构组织的索引。其中聚集索引、次要索引、复合索引、前缀索引、唯一索引默认都是使用B+树索引,统称索引。当然,除了B+树这种类型的索引之外,还有哈希索引(hash index)等。

索引通常用于where条件和order by排序,索引主要用于检索和排序

索引的优势和劣势

优势

类似大学图书馆建书目索引,提高数据检索的效率,降低数据库的IO成本

通过索引列对数据进行排序,降低数据排序的成本,降低了CPU的消耗

劣势

实际上索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录,所以索引列也是要占用空间的。

虽然索引大大提高了查询效率,但是却会降低更新表的速度,如对表进行INSERT/UPDATE和DELETE。

因为更新表的时候,MySQL不仅要保存数据,还要保存一下索引文件每次更新添加了索引列的字段,都会调整因为更新所带来的键值变化后的索引信息。

索引只是提高效率的一个因素,如果mysql有大数据量的表,就需要花时间研究建立优秀的索引或优化查询语句。

发布了116 篇原创文章 · 获赞 23 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/zyxwvuuvwxyz/article/details/104595417