八股总结----数据库(MySQL和Redis)

1.MySQL部分

11.基本写法

列出数据库:show databases;创建数据库:create database mysql_test;切换数据库:use mysql_test;列出表:show tables;创建表:create table student(s_id int,s_name varchar(8),s_birth date);表的列名在前,数据类型在后。在表中插入数据:insert into student values (1,'赵雷','1990-01-01'), (8,'王菊','1990-01-20');

12.执行一条 SQL 查询语句,期间发生了什么?

  • 连接器:建立连接,管理连接、校验用户身份;
  • 查询缓存:查询语句如果命中查询缓存则直接返回,否则继续往下执行。
  • 解析 SQL,通过解析器对 SQL 查询语句进行词法分析、语法分析,然后构建语法树,方便后续模块读取表名、字段、语句类型;
  • 执行 SQL:执行 SQL 共有三个阶段:1. 预处理阶段:检查表或字段是否存在;将 select * 中的 * 符号扩展为表上的所有列。2. 优化阶段:基于查询成本的考虑, 选择查询成本最小的执行计划。3. 执行阶段:根据执行计划执行 SQL 查询语句,从存储引擎读取记录,返回给客户端。

13.索引部分

131.索引的定义

索引是数据的目录,就是帮助存储引擎快速获取数据的一种数据结构。存储引擎,说白了就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。MySQL 存储引擎有 MyISAM 、InnoDB、Memory,其中 InnoDB 是在 MySQL 5.5 之后成为默认的存储引擎。索引和数据就是位于存储引擎中。

132.索引的分类

  • 按「数据结构」分类:B+tree索引、Hash索引、Full-text索引
  • 按「物理存储」分类:聚簇索引(主键索引)、二级索引(辅助索引)
  • 按「字段特性」分类:主键索引、唯一索引、普通索引、前缀索引
  • 按「字段个数」分类:单列索引、联合索引

为什么 MySQL InnoDB 选择 B+tree 作为索引的数据结构?这是因为:B+树和B树相比,B+Tree 只在叶子节点存储数据,而 B 树 的非叶子节点也要存储数据,所以 B+Tree 的单个节点的数据量更小,在相同的磁盘 I/O 次数下,就能查询更多的节点。另外,B+Tree 叶子节点采用的是双链表连接,适合 MySQL 中常见的基于范围的顺序查找,而 B 树无法做到这一点。B+树和二叉树相比,对于有 N 个叶子节点的 B+Tree,其搜索复杂度为O(logdN),其中 d 表示节点允许的最大子节点个数为 d 个。而二叉树的每个父节点的儿子节点个数只能是 2 个,意味着其搜索复杂度为 O(logN),这已经比 B+Tree 高出不少,因此二叉树检索到目标数据所经历的磁盘 I/O 次数要更多。B+树和Hash表相比, Hash 表不适合做范围查询,它更适合做等值的查询。

从物理存储的角度来看,索引分为聚簇索引(主键索引)、二级索引(辅助索引)。

  • 主键索引的 B+Tree 的叶子节点存放的是实际数据,所有完整的用户记录都存放在主键索引的 B+Tree 的叶子节点里;
  • 二级索引的 B+Tree 的叶子节点存放的是主键值,而不是实际数据。

主键索引就是去用一个B+树去查主键字段,叶子节点存储的是整行数据,通过主键就可以获知全部信息,而二级索引则是去查其他字段,比如学生表中的姓名、成绩等列的字段,叶子节点存储的是该二级字段以及主键,通过二级字段可以获知主键,然后通过回表去查该主键对应的整行数据,所以这种方式可能需要两个B+树才能查到数据。

133.什么时候需要索引?

134.什么时候不需要索引?

135.优化索引的办法

  • 前缀索引优化;
  • 覆盖索引优化;
  • 主键索引最好是自增的;
  • 防止索引失效;

2.Redis部分

相关推荐
Elastic 中国社区官方博客20 分钟前
使用 Elasticsearch 导航检索增强生成图表
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
小金的学习笔记25 分钟前
RedisTemplate和Redisson的使用和区别
数据库·redis·缓存
墨楠。29 分钟前
数据结构学习记录-树和二叉树
数据结构·学习·算法
新知图书39 分钟前
MySQL用户授权、收回权限与查看权限
数据库·mysql·安全
文城5211 小时前
Mysql存储过程(学习自用)
数据库·学习·mysql
沉默的煎蛋1 小时前
MyBatis 注解开发详解
java·数据库·mysql·算法·mybatis
呼啦啦啦啦啦啦啦啦1 小时前
【Redis】事务
数据库·redis·缓存
HaoHao_0101 小时前
AWS Serverless Application Repository
服务器·数据库·云计算·aws·云服务器
C语言扫地僧1 小时前
MySQL 事务及MVCC机制详解
数据库·mysql
我们的五年1 小时前
【C语言学习】:C语言补充:转义字符,<<,>>操作符,IDE
c语言·开发语言·后端·学习