数据库-基础版

如何设计一个数据库?

程序实例:

存储管理(需要对数据的格式以及文件的分割进行统一管理)

SQL解析(对SQL进行编译解析,供机器可读)

日志管理(对操作做记录)

权限划分

容灾机制(处理异常情况)

索引管理

锁管理

存储模块:文件系统

为什么要使用索引?

防止全表扫描,降低IO随机读操作,提高查找效率

什么样的信息可以成为索引?

主键,唯一键,经常出现在where语句中的字段,数据重复率低的字段

索引的数据结构?

建立B-Tree结构进行查找(节点中:指针,关键字,数据)

建立B+Tree结构进行查找

非叶子节点仅用来索引,关键字都保存在叶子节点中,所有叶子节点均有一个链指针指向下一个叶子节点

MyISAM中B+Tree的存储方式:主键/非主键索引的叶子节点都是存储指向数据块的指针【这种方式称为非聚簇索引】,InnoDB中B+Tree的存储方式称为聚簇索引

B+Tree更适合用来做存储索引

1. B+Tree树的磁盘读写代价更低(B+树的非叶子节点只存放索引,不存放数据,因此其内部节点相对B-Tree更小,如果把所有同一内部节点的关键字存放在同一盘块中,B+Tree存储的节点更多,一次性读取到内存中的索引信息更多,降低IO读取次数)

2. B+Tree的查询效率更稳定(因为非叶子节点只存放索引,不存放数据,所以每一次查询都是从根节点读取到叶子结点,距离相同,效率相同)

3. B+树更有利于对数据库的扫描(B+Tree只需要遍历叶子结点,就可以完成对全部关键字的扫描,适用于范围查询,并且拥有更高的效率)

B+树在满足聚簇索引和覆盖索引的时候不需要回表查询数据

非聚簇索引一定会回表查询吗?

不一定,这涉及到查询语句所要求的字段是否全部命中了索引,如果全部命中了索引,那么就不必再进行回表查询

举个简单的例子,假设我们在员工表的年龄上建立了索引,那么当进行select age from employee where age < 20的查询时,在索引的叶子节点上,已经包含了age信息,不会再次进行回表查询

联合索引

MySQL可以使用多个字段同时

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

八股文+场景题+算法真题 文章被收录于专栏

Java全新整理八股文 + 场景题 + 算法 精心设计,面试命中率超过80% 专栏优势: 1、问题和答案已经整理到位,答案更专业,可以直接回答,不需要额外总结! 2、场景题讲解清晰,适用于大部分场景的项目,并且持续更新中 3、分享学习心得【知识点的广度和深度,算法有哪些坑,如何准备面试等等】

全部评论

相关推荐

帆软java二面面经1h1.Oauth2流程2.随机盐值加密的原理作用3.支付成功的回调函数里面宕机了怎么办记录状态表+微信端获取消费记录4.线程池在你项目中有什么作用?5.线程池也不能指定线程的顺序,怎么做的?6.1亿个任务,CPU密集型,一个开9个线程,一个开20个线程,实际的物理线程都是8的服务器,这两个服务器哪个执行的快?答案:&nbsp;97.那io密集型呢,为什么8.单例模式双重锁,讲一下每层锁是干啥的?9.多线程图片url转换,图床怎么做的10.实习经历介绍11.遇到的问题。12.使用线程池会有什么问题?13.除了内存泄露和阻塞队列oom14.资源管理方面你应该怎么去设定参数?15.线程池的创建是全局的,还是局部的帆软软件25届秋招正式批内推码【SCUTCWC】★关于帆软•&nbsp;中国大数据商业智能行业领跑者•&nbsp;市场占有率连续7年位居第一(IDC&nbsp;中国)•&nbsp;连续6年蝉联中国大数据企业50强(2018-2023)•&nbsp;全球20个分支机构、2000➕员工,30000➕中大型企业合作客户•&nbsp;薪资透明,心中有数,岗位薪资最高可达45W年包!全线薪资10k+,非技术岗薪资最高20k+!!【工作地点】南京、无锡、成都、杭州、北京等【工作岗位】研发类、客户服务类、产品类、测试类、销售类、设计类、市场类、职能类,8大类&nbsp;&nbsp;可以选择1个主投意向岗位大类后,在岗位大类中选择多个意向岗位。内推码【SCUTCWC】投递时填写可优先筛选!公号:帆软招聘(招聘专区可查进度)【一键内推投递】https://t6ixa9nyl6.jiandaoyun.com/f/65e1a1308ce7672fded0f0cf?ext=SCUTCWC5分钟极速网申!纵享丝滑
帆软软件
|
校招
|
超多精选岗位
点赞 评论 收藏
分享
3 3 评论
分享
牛客网
牛客企业服务