数据库索引

为什么要使用索引

快速查询数据。

什么样的信息能成为索引

能把数据记录限定在一定查找范围的字段(主键、唯一键以及普通键等)。

索引的数据结构

一般使用B+树做存储索引。

B+树一些主要的特点:

  • 字数指针和关键字个数相同(读写代价更低)
  • 非叶节点的字数指针P[i],指向关键字值[K[i], K[i+1])的子树
  • 非叶节点仅用来做索引,数据都保存在叶子节点 (查询效果更稳定)
  • 每个叶子节点都有一个指针指向下一个叶子节点(便于选择指定区间的元素,有利于对数据库进行扫描)

优点:

  • B+树的读写代价更低
  • B+树的查询效率更稳定
  • B+树更有利于对数据库进行扫描

Hash表优点和缺点:

  • 优点
    • B+树需要执行多次IO操作才能找到目标的数据记录,而Hash表只需进行一次IO操作
  • 缺点
    • 仅能满足=、“IN”操作,不能进行范围查询(<、>、between and)。
    • 不能用来避免数据的排序操作
    • 不能进行部分索引键的查询
    • 不能避免表的扫描
    • 遇到大量数据的hash值相同时,可能效率会低于B+树

密集索引和稀疏索引

密集索引

每个数据记录的键值分别对应一个索引项

稀疏索引

  • 只有一部分数据记录的键值有索引项对应。
  • 为了定位一条数据记录,需要首先找到小于等于目标记录的最大索引,之后从这一项开始进行顺序遍历,直到找到目标记录为止。

区别

稠密索引的查询速度更快,稀疏索引占用的空间更小,且更容易插入和删除等。

全部评论

相关推荐

就只能3个月,但是要求长期全职实习
Swaying:你确实是能长期实习啊,但是你那时候有事也没啥办法嘛
点赞 评论 收藏
分享
06-13 17:33
门头沟学院 Java
顺序不记了,大致顺序是这样的,有的相同知识点写分开了1.基本数据类型2.基本数据类型和包装类型的区别3.==和equals区别4.ArrayList与LinkedList区别5.hashmap底层原理,put操作时会发生什么6.说出几种树型数据结构7.B树和B+树区别8.jvm加载类机制9.线程池核心参数10.创建线程池的几种方式11.callable与runnable区别12.线程池怎么回收线程13.redis三剑客14.布隆过滤器原理,不要背八股,说说真正使用时遇到了问题没有(我说没有,不知道该怎么回答了)15.堆的内存结构16.自己在写项目时有没有遇见过oom,如何处理,不要背八股,根据真实经验,我说不会17.redis死锁怎么办,watchdog机制如何发现是否锁过期18.如何避免redis红锁19.一个表性别与年龄如何加索引20.自己的项目的QPS怎么测的,有没有真正遇到大数量表21.说一说泛型22.springboot自动装配原理23.springmvc与springboot区别24.aop使用过嘛?动态代理与静态代理区别25.spring循环依赖怎么解决26.你说用过es,es如何分片,怎么存的数据,1000万条数据怎么写入库中27.你说用limit,那么在数据量大之后,如何优化28.rabbitmq如何批次发送,批量读取,答了延迟队列和线程池,都不对29.计网知不知道smtp协议,不知道写了对不对,完全听懵了30.springcloud知道嘛?只是了解反问1.做什么的?短信服务,信息量能到千万级2.对我的建议,基础不错,但是不要只背八股,多去实际开发中理解。面试官人不错,虽然没露脸,但是中间会引导我回答问题,不会的也只是说对我要求没那么高。面完问我在济宁生活有没有困难,最快什么时候到,让人事给我聊薪资了。下午人事打电话,问我27届的会不会跑路,还在想办法如何使我不跑路,不想扣我薪资等。之后我再联系吧,还挺想去的😭,我真不跑路哥😢附一张河科大幽默大专图,科大就是大专罢了
查看30道真题和解析
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务