博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据库两大神器【索引和锁】
阅读量:7154 次
发布时间:2019-06-29

本文共 784 字,大约阅读时间需要 2 分钟。

hot3.png

前言

只有光头才能变强

索引和锁在数据库中可以说是非常重要的知识点了,在面试中也会经常会被问到的。

本文力求简单讲清每个知识点,希望大家看完能有所收获

声明:如果没有说明具体的数据库和存储引擎,默认指的是MySQL中的InnoDB存储引擎

一、索引

在之前,我对索引有以下的认知:

  • 索引可以加快数据库的检索速度
  • 经常进行INSERT/UPDATE/DELETE操作就不要建立索引了,换言之:索引会降低插入、删除、修改等维护任务的速度。
  • 索引需要占物理和数据空间
  • 了解过索引的最左匹配原则
  • 知道索引的分类:聚集索引和非聚集索引
  • Mysql支持Hash索引和B+树索引两种

看起来好像啥都知道,但面试让你说的时候可能就GG了:

  • 使用索引为什么可以加快数据库的检索速度啊?
  • 为什么说索引会降低插入、删除、修改等维护任务的速度。
  • 索引的最左匹配原则指的是什么?
  • Hash索引和B+树索引有什么区别?主流的使用哪一个比较多?InnoDB存储都支持吗?
  • 聚集索引和非聚集索引有什么区别?
  • ........

1.1聊聊索引的基础知识

首先Mysql的基本存储结构是(记录都存在页里边):

  • 各个数据页可以组成一个双向链表
  • 每个数据页中的记录又可以组成一个单向链表

    • 每个数据页都会为存储在它里边儿的记录生成一个页目录,在通过主键查找某条记录的时候可以在页目录中使用二分法快速定位到对应的槽,然后再遍历该槽对应分组中的记录即可快速找到指定的记录
    • 其他列(非主键)作为搜索条件:只能从最小记录开始依次遍历单链表中的每条记录

所以说,如果我们写select * from user where username = 'Java3y'这样没有进行任何优化的sql语句,默认会这样做:

转载于:https://my.oschina.net/u/3611008/blog/1862208

你可能感兴趣的文章
nodejs express
查看>>
解决Windows2003的IE安全级别不能修改的问题
查看>>
tomcat中的日志开关文件(logging.properties)介绍
查看>>
UiTextField 限制输入长度
查看>>
onSaveInstanceState(Bundle outState)的调用时机
查看>>
SQLSERVER手动增长日志文件和数据文件
查看>>
WindowsPhone8中实现圆形图片的生成显示
查看>>
asp.net ajax 检测用户名是否可用代码
查看>>
一次领域驱动设计(DDD)的实际应用
查看>>
手机接口测试
查看>>
guava 学习笔记 瓜娃(guava)的API快速熟悉使用
查看>>
WebSphere ILOG JRules 规则引擎运行模式简介
查看>>
关于fmri数据分析的两大类,四种方法
查看>>
ASP.NET MVC5 网站开发实践(二) Member区域–我的咨询列表及添加咨询
查看>>
Windows 8.1 应用再出发 (WinJS) - 几种新增控件(2)
查看>>
简单JS实现对表的行的增删
查看>>
ASP.NET MVC 3: Razor中的@:和语法
查看>>
Android四大基本组件介绍与生命周期 - bravestarr - 博客园
查看>>
ibatis.net:在VS中支持xml智能提示
查看>>
EWM一个仓库号对应ERP多个PLANT的配置
查看>>