数据库两大神器【索引和锁】

前言

只有光头才能变强面试

索引和锁在数据库中能够说是很是重要的知识点了,在面试中也会常常会被问到的。sql

本文力求简单讲清每一个知识点,但愿你们看完能有所收获数据库

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

1、索引

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

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

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

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

1.1聊聊索引的基础知识

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

  • 各个数据页能够组成一个双向链表
  • 每一个数据页中的记录又能够组成一个单向链表基础

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

因此说,若是咱们写select * from user where username = 'Java3y'这样没有进行任何优化的sql语句,默认会这样作:select

相关文章
相关标签/搜索