mysql索引

mysql索引

1、mysql的索引相当于电话本前面的目录可以方便我们快速的查找数据。
2、不同的数据库引擎底层的实现是不同的。
3、mysql当中最常用的存储的数据结构是b+树。
首先需要了解排序树的概念,比如二叉排序树、b树。
b+树也是一颗排序树 ,同时它的叶子节点会存放记录数据。而非叶子节点 只会存放 索引。这样的好处是非 叶子节点可以存放更多的数据,从而让整颗树 更矮,减少磁盘IO。当然这也属于用空间换取时间的做法。
4、如果没有显示的指定主键,mysql会默认为记录生成一个隐式主键。然后mysql会以主键建立一颗聚簇索引(真实存放数据的b+树)。
如果我们查找一条记录是以ID为条件的记录,通过b+树可以非常快速的查找到对应的记录。
5、除了聚簇索引,还有二级索引、联合索引、唯一索引等其他索引
二级索引:除主键外的其他字段建立的索引,二级索引并不会存放真实的数据,它的叶子节点存放的是主键ID,所以当我们通过二级索引匹配对应记录后,还需要拿到对应的主键去聚簇索引回表查找数据。特殊情况是当我们查询的字段刚好只有主键和二级索引时不会进行回表。
联合索引: 每建立一颗二级索引都会消耗一定的资源,当我们能够确定多个查询条件的时候我们可以建立联合索引。在联合索引中叶子节点会存放多个索引的记录值,同时首先会根据最前的索引排序,在前面相同的情况下才会按第二个索引进行排序 所以联合索引遵循最左匹配原则,也就是如果第一个索引都不能命中的话,后面的就根本不会查询。
唯一索引:是唯一性约束。也可以直接在业务层面就进行限制。在进行范围查找的时候如果条件是唯一索引它会立即停止查找。

连接查询的底层原理

首先会根据驱动表的查询条件获取结果集然后用结果作为查询条件挨个去被动表进行查询。当驱动表的数据越大,相当于外层循环的次数越多,就会涉及更多次数据库连接消耗,所以我们尽量选用数量小的作为驱动表。需要注意的是每次驱动表查询到满足条件的记录会马上到被驱动表去查询,因为满足驱动表条件的记录可能会很多,所以需要马上去被驱动表查询。
当多表联查的时候,会使用被驱动的一条记录继续跟后面的被驱动表进行匹配。相当于进行了多层嵌套循环,所以在实际开发中 需要注意不要太多表的连接查询性能不好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值