秋招面试知识准备——数据库

秋招面试知识准备——数据库

数据库

  • 秋招面试知识准备——数据库
    • 1. 索引
      • 1.1 索引概念
      • 1.2 索引的类型
      • 1.3 索引的数据结构
      • 1.4 索引的结构类型
      • 1.5 索引的优点缺点
    • 2. SQL语句优化

1. 索引

1.1 索引概念

索引,在 MySQL 也称为键 (Key),是 存储引擎 快速找到记录的一种 数据结构 。相当于图书的目录,可根据目录中的页码快速找到所需的内容。

1.2 索引的类型

  1. 主键索引
  2. 非聚类索引
  3. 联合索引

1.3 索引的数据结构

B-Tree (平衡树, Balance Tree):也称为 多路平衡查找树 ,并且所有叶子节点位于同一层。
B+Tree:它不仅具有 B-Tree 的平衡性,并且可通过 顺序访问指针 来提高 区间查询的性能。

B+Tree 与 B-Tree 最大区别:B+Tree 的非叶子结点不保存数据,只用于索引,所有数据都保存在叶子结点中。而且叶子结点间按照从小到大顺序链接起来。

B-Tree/B+Tree 的增删改查:
查找操作 :首先在 根节点 进行 二分查找 ,找到一个 key 所在的指针,然后递归地在指针所指向的节点进行查找。直到查找到叶子节点,然后在 叶子节点 上进行 二分查找 ,找出 key 所对应的 data。
二分查找要求表有序,正好 B-Tree 和 B+Tree 结点中的 key 从左到右非递减有序排列。

增删操作 :会破坏平衡树的平衡性,因此在插入删除操作之后,需要对树进行一个分裂、合并、
旋转等操作来维护平衡性。

1.4 索引的结构类型

(1)B+ Tree 索引

  • B+Tree 索引是大多数 MySQL 存储引擎的默认索引类型。

  • 因为 B+ Tree 的 有序性 ,因此可用于 部分查找 、 范围查找 、 排序 和 分组

  • 适用于全键值、键值范围和键前缀查找,其中键前缀查找只适用于最左前缀查找。若不是按照索引列的顺序进行查找,则无法使用索引。

(2)Hash 索引

  • Hash 索引能以 O(1) 时间进行查找,但是失去了有序性。因此无法用于排序与分组,无法用于部分查找和范围查找,只支持 精确查找
  • Hash 索引仅满足 = , IN 和 <=> 查询,不能使用范围查询。因为 Hash 索引比较的是Hash 运算后的 Hash 值,所以它只能用于等值的过滤。

1.5 索引的优点缺点

(1)优点

  • 大大减少了服务器需要扫描的数据行数。
  • 避免服务器进行排序和分组操作,以避免创建 临时表
    B+Tree 索引是有序的,可以用于 ORDER BY 和 GROUP BY 操作。临时表主要是在排序和分组过程中创建,不需要排序和分组,也就不需要创建临时表。
  • 随机 I/O 变为 顺序 I/O
    B+Tree 索引是有序的,会将相邻的数据都存储在一起。

(2)缺点
索引并不是越多越好,索引固然可以提高相应的 SELECT 的效率,但同时也降低了 INSERT 及 UPDATE 的效率,因为 INSERT 或 UPDATE 时有可能会 重建索引 。

2. SQL语句优化

  1. 避免出现 select * , 查找哪个字段就写具体字段。
  2. SQL中尽量不适用IN,能用between 就不用 IN。
  3. 避免在 where 的句子中对字段进行表达式操作。
  4. 联合索引,例如(id, name, sex),遵守最左前缀法则。

以下是正确的的:

select * from student where id = 10
select * from student where id = 10 and name = 'aliyun'
select * from student where id = 10 and name = 'aliyun' and sex = '女'

不正确的:(会导致联合索引失败)

select * from student where name = 'aliyun'
select * from student where sex = '女'

你可能感兴趣的:(秋招,数据库,面试,mysql)