一,mysql索引起步
1.索引的概述
索引(index)是帮助mysql高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。
左边是数据表,一共有两列七行记录,最左边的0x07格式的数据是物理地址(注意逻辑上相邻的记录在磁盘上也并不是一定物理相邻的)。为了加快 Col 2 的查找,可以维护一个右边所示的二叉查找树,每个节点分别包含索引键值和一个指向对应数据的物理地址的指针,这样就可以运用二叉查找快速获取到对应的数据了。
一般来说索引本身也很大,不可能全部存储在内存中,因此索引往往以索引文件的形式存储在磁盘上。建立索引是数据库中用来提高性能的最常用的方式。
2.建立索引的优势
优势:(1)类似于书籍的目录索引,提高数据检索的效率,降低数据库的io成本
(2)通过索引对数据进行排序,降低数据排序的成本,降低cpu的消耗
劣势:(1)索引也是一张表,保存了主键和索引字段,并指向实体类的记录,因此索引列也要占用空间
(2)索引提高了查询的效率,但同时也降低了表的更新速度,如insert、update、delete。更新表时mysql不仅要保存数据,还要保存下索引列的字段,都需要调整因为更新所带来的键值变化后的索引信息。
3.什么时候建立索引
索引是应用程序设计和开发的一个重要方面。若索引太多,应用程序的性能可能会受到影响。而索引太少,对查询性能又会产生影响,要找到一个平衡点,这对应用程序的性能至关重要。
一些开发人员总是在事后才想起添加索引----我一直认为,这源于一种错误的开发模式。如果知道数据的使用,那么从一开始就应该在需要处添加索引。开发人员往往对数据库的使用停留在应用的层面,比如编写SQL语句、存储过程之类,甚至可能不知道索引的存在,或认为事后让相关DBA加上即可。DBA往往不够了解业务的数据流,而添加索引需要通过监控大量的SQL语句进而从中找到问题,这个步骤所需的时间肯定是远大于初始添加索引所需的时间,并且可能会遗漏一部分的索引。
当然索引也并不是越多越好,我曾经遇到过这样一个问题:某台MySQL服务器 iostat 显示磁盘使用率一直处于100%,经过分析后发现是由于开发人员添加了太多的索引,在删除一些不必要的索引之后,磁盘使用率马上下降为20%。可见索引的添加也是非常有技术含量的。
二、索引的数据结构
三、为什么mysql使用B+树
四、索引分类
五、索引设计原则
来源:https://www.cnblogs.com/jojop/p/13951979.html
版权申明:内容来源网络,版权归原创者所有。除非无法确认,我们都会标明作者及出处,如有侵权烦请告知,我会立即删除并表示歉意。谢谢!