[mysql] 数据库索引

分类。

索引分为:

  • 主键索引
    一个列为设置为主键会默认创建一个主键索引。
  • 唯一索引
    严格来说主键索引是唯一索引的一种,这两个的区别是:主键索引不允许为null,唯一索引可以为null;
  • 单列索引
  • 复合索引

或者分为:

  • 聚集索引:聚集索引存储记录是物理上连续存在,聚集索引一个表只能有一个

  • 非聚集索引:非聚集索引是逻辑上的连续,物理存储并不连续,非聚集索引一个表可以存在多个

还有

  • 覆盖索引:就是select的数据列只用从索引中就能够取得,不必从数据表中读取,换句话说查询列要被所使用的索引覆盖,且索引必须存储列的值。

最左前缀原则

复合索引遵从最左前缀原则,比如说一张学生表里面的联合索引如key 'age name sex'

A:select * from student where age = 16 and name = '小张'//走索引
B:select * from student where name = '小张' and sex = '男'//直接从name开始,不走索引
C:select * from student where name = '小张' and sex = '男' and age = 18//顺序不影响,走索引

有哪些例子不走索引呢?

表student中两个字段age,name加了索引

A:select * from student where 'name' like '王%'       //like 查询是以%开头
B:select * from student where age + 8 = 18       //用索引列进行计算
C:select * from student where  concat('name','哈') ='王哈哈'       //对索引列用函数了
D:select * from student where age != 18       //一些关键字会导致索引失效,例如 or, != , not in,is null ,is not unll

详情可见博客

数据库索引为什么用B+树

  1. B+树的磁盘读写代价更低:B+树的内部节点并没有指向关键字具体信息的指针,因此其内部节点相对B树更小,如果把所有同一内部节点的关键字存放在同一盘块中,那么盘块所能容纳的关键字数量也越多,一次性读入内存的需要查找的关键字也就越多,相对IO读写次数就降低了。
  2. 由于B+树的数据都存储在叶子结点中,分支结点均为索引,方便扫库,只需要扫一遍叶子结点即可,但是B树因为其分支结点同样存储着数据,我们要找到具体的数据,需要进行一次中序遍历按序来扫,所以B+树更加适合在区间查询的情况。比如数据库中select数据,不一定只选一条,很多时候会选多条,比如按照id排序后选10条。如果是多条的话,B树需要做局部的中序遍历,可能要跨层访问。而B+树由于所有数据都在叶子结点,不用跨层,同时由于有链表结构,只需要找到首尾,通过链表就能把所有数据取出来了

为什么不用hash:文件系统和数据库的索引都是存在硬盘上的,并且如果数据量大的话,不一定能一次性加载到内存中。参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值