目录
1. 索引是什么?它是解决什么问题的
数据库的索引可以类比成一本书的目录,创建素引之后,它能够大大提高我们的查询速度。
2. 索引的缺陷
a) 创建索引需要使用到额外的硬盘空间
b) 可能会影响到增删改操作的效率(不一定会影响)
因此,就整体来说,使用索引是利大于弊的,它能大大提高我们日常开发效率,我们在日常开发中也会经常使用到它。
3. 如何使用sql创建索引,及其注意事项
a) show index from 表名;(主键,外键,unique,会自动生成索引)
b) create index on 表名(列名);(给指定列创建索引)
eg:create index on student(name); (给学生表创建name索引)
c) drop index on 表名; (删除索引)
索引是针对列来使用的,后续查询的时候,查询条件使用的列和索引要匹配,才能触发索引,才能提高效率。
注:针对一个数据量大的表,创建/删除索引,是非常危险的,可能会触发大量的硬盘IO操作,很容易把机器搞挂了。。。然后进入到按分钟计费环节(doge)。
4. 索引的底层数据结构 =》B+树的优势和特点
特点:
a) N叉搜索树,每个节点上有N个Key,分为N个区间。
b) 每个父节点的元素,都会下沉到子节点中,作为该子节点中最大的元素存起来。
c) 叶子集合这一层就构成了数据集合的全集。
d) 使用类似于链表的结构,把叶子结点串起来。
优势:
a) N叉搜索树,高度比较低,有效减少了硬盘IO操作。
b) 范围查询非常方便/高效。
c) 所有的查询都落在叶子结点上,开销非常稳定,容易预估成本。
d) 叶子结点存储数据行,非叶子节点存储只存储队列的Key值,非叶子节点占据的空间小,可以加载到内存中,进一步减少IO的访问次数,加快查询的效率。