MySql进阶篇---索引

24 篇文章 0 订阅

什么是索引

        索引时类似于书的目录,可以通过目录(索引)快速的定位到数据的真实位置。是帮助Mysql高效获取数据的数据结构。

索引原理

        通过不断地缩小想要获取数据的范围来筛选出最终想要的结果,同时把随机的时间变成顺序的时间,也就是说,有了这种索引机制,我们可以总是用同一种查找方式来锁定数据。

索引优劣势

        优势:快速的定位数据位置,减少IO次数

                 降低了排序成本

        劣势:维护索引需要占用存储空间

                 增删改操作时,还需要额外的维护索引树,需要消耗时间

索引分类

主键索引

        设定为主键后数据库会自动建立索引

-- 创建主键索引
ALTER TABLE 表名 add PRIMARY KEY 表名(列名);
-- 删除建主键索引:
ALTER TABLE 表名 drop PRIMARY KEY ;

单值索引

        即一个索引只包含单个列,一个表可以有多个单列索引      

-- 创建单值索引
CREATE INDEX 索引名 ON 表名(列名);
-- 删除索引:
DROP INDEX 索引名;

唯一索引

        索引列的值必须唯一,允许为null

-- 创建唯一索引
CREATE UNIQUE INDEX 索引名 ON 表名(列名);
-- 删除索引
DROP INDEX 索引名 ON 表名;

组合索引

        一个索引对应多个列,满足最左前缀原则。

        a,b,c三列。

        a,b建立组合索引,满足最左前缀原则,必须要出现最左边的列

        a and b  生效

        b and a  生效

        a and c  生效

        b and c  不生效

全文索引

        需要模糊查询时,一般索引无效,这时就可使用全文索引了

建立索引的原则

哪些情况需要创建索引

        主键自动建立索引

        频繁作为查询条件的字段应该创建索引(where 后面的语句)

        查询中排序的字段,排序字段若通过索引去访问将大大提高排序速度

        分组中的字段

哪些情况不要创建索引

        表记录太少

        经常增删改的表:提高了查询速度,同时会降低更新表的速度如对表进行INSERT、UPDATE和DELETE,因为更新表时,MySql不仅要保存数据,还要保存一下索引文件

        Where条件里用不到的字段不创建索引

        数据重复且分布平均的表字段,因此应该职位最经常查询和最经常排序的数据列建立索引,某个数据列包含许多重复的内容,建立索引没有太大实际效果。

索引的数据结构

        索引是一个树形结构:B+树

        首先,二叉树,红黑树(自平衡)被排除,书的高度较高,会影响查询的效率。

        B-树  自平衡多鲁叔  在一个结点中放多个数据,横向扩展,降低了树的高度

        B+树  自平衡多路搜索树  排好序

                   非叶子节点只存储索引,数据都储存在叶子节点

                   会存在一些数据冗余。

                   叶子节点之间会有一个相互指向的指针(对于自增主键,范围查找非常适合)

聚簇索引和非聚簇索引

        聚簇索引:找到了索引,就找到了数据。

        非聚簇索引:索引和数据是分离的,找到了索引,还没有找到数据,需要根据主键,再次徽标查询,才能够查到数据

        innodb:使用主键作为查询条件,就是聚簇索引

        MyISAM:索引文件与数据文件时分开存放的,所以时非聚簇的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值