MySQL基础汇总

2023-05-16

MySQL基础汇总

文章目录

  • MySQL基础汇总
    • 思维导图
    • 索引
      • 索引特点优缺点适用场合
        • 索引特点优缺点
        • 索引使用的注意事项
        • 什么情况适用索引
        • 什么情况不适用索引
      • 数据库的索引数据结构
        • 二分查找树
        • B树
        • B+树
        • B树和B+树的区别
        • 为什么使用B+树
      • 索引分类
        • 索引的分类
    • 引擎
      • innoDB
      • MyISAM
      • 区别
    • 事务隔离级别(恶果:脏读 幻读 不可重复读)
      • 分类
    • 数据库特性 ACID
    • sql
      • sql优化
      • 实践中的sql优化
    • 5 种连接 left join、right join、inner join,full join cross join
    • 数据库设计
    • 数据库连接池
    • DDL DML DCL
    • 数据库锁
    • explain
    • char varchar text 区别
    • limit200怎么优化
    • 分库分表
      • 问题
      • 分析
      • 解决方案
        • 为什么要分库分表
        • 中间件
        • 中间件对比
        • 怎么拆分的
        • 如何线上切换系统
        • 动态扩容方案
        • 全局id
      • 结合实际
    • 读写分离
      • 如何实现读写分离
      • 主从复制的原理是什么
      • 数据丢失问题
      • 主从同步延时的问题
    • 题目
    • 解决
      • MySQL的复制原理以及流程基本原理流程,3个线程以及之间的关联
      • MySQL中myisam与innodb的区别,至少5点
      • MySQL中varchar与char的区别以及varchar(50)中的50代表的涵义
      • 问了innodb的事务与日志的实现方式
      • 问了MySQL binlog的几种日志录入格式以及区别
      • 问了下MySQL数据库cpu飙升到500%的话他怎么处理?
      • sql优化 (1). explain出来的各种item的意义; (2). profile的意义以及使用场景;
      • 备份计划,mysqldump以及xtranbackup的实现原理
      • mysqldump中备份出来的sql,如果我想sql文件中,一行只有一个insert....value()的话,怎么办?如果备份需要带上master的复制点信息怎么办?
      • 500台db,在最快时间之内重启
      • innodb的读写参数优化 (1). 读取参数 (2). 写入参数; (3). 与IO相关的参数; (4). 缓存参数以及缓存的适用场景。
      • 你是如何监控你们的数据库的?你们的慢日志都是怎么查询的?
      • 你是否做过主从一致性校验,如果有,怎么做的,如果没有,你打算怎么做?
      • 你们数据库是否支持emoji表情,如果不支持,如何操作?
      • 你是如何维护数据库的数据字典的?
      • 你们是否有开发规范,如果有,如何执行的
      • 表中有大字段X(例如:text类型),且字段X不会经常更新,以读为为主,请问 (1). 您是选择拆成子表,还是继续放一起; (2). 写出您这样选择的理由。
      • MySQL中InnoDB引擎的行锁是通过加在什么上完成(或称实现)的?为什么是这样子的?
      • 如何从mysqldump产生的全库备份中只恢复某一个库. 某一张表?

思维导图

Mysql数据库的基础MySQL数据库分库分表的问题
MySQL的一些题目

索引

索引特点优缺点适用场合

索引特点优缺点

  • 优点:
    1. 加快检索速度–使用到B+树检索
    2. 唯一性
    3. 分组、排序可以显著减少时间,减少回表
  • 缺点
    1. 降低插入更新的速度
    2. 需要维护索引
    3. 需要空间

索引使用的注意事项

  1. 别用or
  2. 多列索引需要使用第一列
  3. like使用%开头,就不会走索引

什么情况适用索引

  1. 经常group、order
  2. 查询用
  3. 避免回表,如果只查其中某几个字段,可以建一个索引
  4. union属性

什么情况不适用索引

  1. 索引拿到之后,还需要回到原表中查数据
  2. 一些没有特征的值,比如性别。就2种

数据库的索引数据结构

二分查找树

B树

B+树

B树和B+树的区别

  1. B+树的非叶子节点不保存关键字记录的指针,这样使得B+树每个节点所能保存的关键字大大增加;
  2. B+树叶子节点保存了父节点的所有关键字和关键字记录的指针,每个叶子节点的关键字从小到大链接;
  3. B+树的根节点关键字数量和其子节点个数相等;
  4. B+的非叶子节点只进行数据索引,不会存实际的关键字记录的指针,所有数据地址必须要到叶子节点才能获取到,所以每次数据查询的次数都一样;

为什么使用B+树

  1. 有利于数据库扫描
B树在提高了磁盘IO性能的同时并没有解决元素遍历的效率低下的问题,
而B+树只需要遍历叶子节点就可以解决对全部关键字信息的扫描,
所以对于数据库中频繁使用的range query,B+树有着更高的性能。
  1. 磁盘读写代价低
B+树的内部结点并没有指向关键字具体信息的指针。因此其内部结点相对B树更小。
如果把所有同一内部结点的关键字存放在同一盘块中,那么盘块所能容纳的关键字数量也越多
一次性读入内存中的需要查找的关键字也就越多。相对来说I/O读写次数也就降低了。
  1. 查询效率稳定
由于内部结点并不是最终指向文件内容的结点,而只是叶子结点中关键字的索引。
所以任何关键字的查找必须走一条从根结点到叶子结点的路。
所有关键字查询的路径长度相同,导致每一个数据的查询效率相当。

索引分类

索引的分类

  1. 主键索引
  2. 全文索引:可以针对值中的某个单词
  3. 普通索引:允许重复
  4. unique唯一索引:不可以相同,可以为null
  5. 组合索引:将多个字段建到同一个索引里面,组合需唯一
  6. 聚集索引:指向的就是这一行的数据,相当于主键。(没设置主键的话,依次:第一个唯一键、隐藏主键)

引擎

innoDB

MyISAM

区别

  1. 实现上,I在叶子节点上存储数据地址,M在叶子节点上直接跟数据内容
  2. I适用于多并发,多写的模式上。M适用于读比较多
  3. M锁粒度到表,I锁粒度到行

事务隔离级别(恶果:脏读 幻读 不可重复读)

分类

  1. 读未提交
  2. 读提交
  3. 可重复读
  4. 串行化

数据库特性 ACID

  1. 原子性
  2. 一致性
  3. 隔离性
  4. 持久性

sql

sql优化

  1. 避免全表扫描,建立索引
  2. 避免全表扫描,不用in、or、not in
  3. 避免全表扫描,计算之后,不走索引

实践中的sql优化

  1. 数据结构要对
  2. 适当冗余
  3. explain sql语句,查看问题

5 种连接 left join、right join、inner join,full join cross join

  1. left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录
  2. right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录
  3. inner join(等值连接) 只返回两个表中联结字段相等的行

数据库设计

  1. 第一范式:列不可再分
  2. 第二范式:表只做一件事情
  3. 第三范式:避免值传递
  4. 第四范式:同一个表中的多对多关系去除
  5. 第五范式:从最终结构建立原始结构

数据库连接池

DDL DML DCL

  1. 表结构 创建表、字段等
  2. 表数据 curd
  3. DCL:数据控制。commit、rollback、set transaction

数据库锁

explain

char varchar text 区别

  1. char定长,255,用空格在字符串后面补齐
  2. varchar可变长度,65535
  3. text,全部用来存字符串

limit200怎么优化

select * from Member limit 10000,100

  1. 子查询优化
select * from Member where MemberID >= (select MemberID fro
m Member limit 100000,1) limit 100
  1. id限定
select * from orders_history where type=2 and id between 1000
000 and 1000100 limit 100;

分库分表

问题

  1. 为什么要分库分表
  2. 中间件
  3. 中间件对比
  4. 怎么拆分的
  5. 如何线上切换系统
  6. 动态扩容方案
  7. 全局id

分析

解决方案

为什么要分库分表

一般是并发量大或者数据量大

中间件

TDDL、mycat、sharding-jdbc

中间件对比

  1. TDDL:淘宝团队开发,client层,基本没人用
  2. mycat:基于阿里的cobar,功能完善,proxy层
  3. sharding,当当开源,client层方案,社区活跃

怎么拆分的

  1. 垂直拆分:订单表,订单商品表、订单日志表等。
  2. 水平拆分:表结构一样,分布到不同的库里面

如何线上切换系统

  1. 停机迁移
  2. 双写迁移
A表示需要分割的表
原来的代码对A表进行增删改的地方,都加上对新库的增删改代码
新库同时导老库的数据
同时根据"修改时间"字段判断是否写入
循环几次,基本能保证新老一致

分库分表不停机方案

动态扩容方案

  1. 32*32
  2. 添加机器,就把旧的数据往新机器放
  3. 直到32台机器

全局id

  1. 数据库自增id
  2. uuid
  3. 系统当前时间
  4. snowflake算法
1 + 41 + 10 + 12
不用+时间戳+工作机器id+同一毫秒内的数字

结合实际

  1. 数据量大了,影响效率,三个表千万的数据,占了4G左右
  2. 查询有时候需要几秒的时间,插入速度减慢
  3. 用的sharding
  4. 分为128份,估算一年是一亿左右的数据
  5. 停机扩容
  6. 时间戳+课程+随机数

读写分离

如何实现读写分离

主从架构,一个主库挂上一个或者多个从库,通过mysql的同步功能

主从复制的原理是什么

  1. binlog复制
  2. binlog:mysql中的所有增删改操作,都会记录到binlog日志里面(statement记录语句、row记录修改前后的数据、mixed混合模式-不会有歧义的就statement)
  3. 主库写入数据,同时也会写redolog和binlog,有一个io线程和从库连接
  4. 从库通过io线程拿到binlog,写到系统的文件缓存中relaylog,sql线程去执行relay日志,将这个同步到本地库中
  5. 从库的操作是串行化的
  6. 主库写并发1000会有几ms的延时,2000有小几十

数据丢失问题

  1. 问题描述:写完binlog,主库就挂掉了
  2. 通过semi-sync半同步复制
  3. 表示binlog需要被其他任意一个库读取到,才算这条语句执行完毕

主从同步延时的问题

  1. 因为主从同步延时产生的问题
  2. 开启从库的并行复制,就是sql线程
  3. 分库,分摊压力
  4. 部分强要求的实时性的,直接连主库
  5. 代码重写

题目

  1. MySQL的复制原理以及流程基本原理流程,3个线程以及之间的关联
  2. MySQL中myisam与innodb的区别,至少5点
  3. MySQL中varchar与char的区别以及varchar(50)中的50代表的涵义
    (1). varchar与char的区别 (2). varchar(50)中50的涵义 (3). int(20)中20的涵义 (4). mysql为什么这么设计
    事务
  4. 问了innodb的事务与日志的实现方式
    (1). 有多少种日志;
    (2). 事物的4种隔离级别 (3).事务是如何通过日志来实现的,说得越深入越好。
  5. 问了MySQL binlog的几种日志录入格式以及区别
    1). binlog的日志格式的种类和分别 (2). 适用场景; 结合第一个问题,每一种日志格式在复制中的优劣。
  6. 问了下MySQL数据库cpu飙升到500%的话他怎么处理?
    1. 查看日志
    2. 查看当前进程
    3. 没有经验的,可以不问; (2). 有经验的,问他们的处理思路。
  7. sql优化 (1). explain出来的各种item的意义; (2). profile的意义以及使用场景;
    1. 语句类型
    2. 索引
    3. 行数
  8. 备份计划,mysqldump以及xtranbackup的实现原理
    (1). 备份计划;
    (2). 备份恢复时间;
    (3). xtrabackup实现原理
  9. mysqldump中备份出来的sql,如果我想sql文件中,一行只有一个insert…value()的话,怎么办?如果备份需要带上master的复制点信息怎么办?
  10. 500台db,在最快时间之内重启
  11. innodb的读写参数优化 (1). 读取参数 (2). 写入参数; (3). 与IO相关的参数; (4). 缓存参数以及缓存的适用场景。
  12. 你是如何监控你们的数据库的?你们的慢日志都是怎么查询的?
    阿里的during,有提供看板
  13. 你是否做过主从一致性校验,如果有,怎么做的,如果没有,你打算怎么做?
  14. 你们数据库是否支持emoji表情,如果不支持,如何操作?
    utf8-mb4
  15. 你是如何维护数据库的数据字典的?
    1. 注释
    2. 字典表
  16. 你们是否有开发规范,如果有,如何执行的
  17. 表中有大字段X(例如:text类型),且字段X不会经常更新,以读为为主,请问 (1). 您是选择拆成子表,还是继续放一起; (2). 写出您这样选择的理由。
    join会有性能消耗
    不拆
  18. MySQL中InnoDB引擎的行锁是通过加在什么上完成(或称实现)的?为什么是这样子的?
    for update,根据主键、唯一键
  19. 如何从mysqldump产生的全库备份中只恢复某一个库. 某一张表?
    开放性问题:据说是腾讯的 一个6亿的表a,一个3亿的表b,通过外间tid关联,你如何最快的查询出满足条件的第50000到第50200中的这200条数据记录。
  20. SQL语言包括哪几部分?每部分都有哪些操作关键字?
  21. 完整性约束包括哪些?
  22. 什么是事务?及其特性?
  23. 什么是锁?
  24. 什么叫视图?游标是什么?
  25. 什么是存储过程?用什么来调用?
  26. 索引的作用?和它的优点缺点是什么?
  27. 如何通俗地理解三个范式?
  28. 什么是基本表?什么是视图?
  29. 试述视图的优点?
  30. NULL是什么意思
  31. 主键、外键和索引的区别?
  32. 你可以用什么来确保表格里的字段只接受特定范围里的值?
  33. 说说对SQL语句优化有哪些方法?(选择几条)
  34. SQL语句中‘相关子查询’与‘非相关子查询’有什么区别?
  35. char和varchar的区别?
  36. Mysql 的存储引擎,myisam和innodb的区别。
  37. 数据表类型有哪些
  38. MySQL数据库作发布系统的存储,一天五万条以上的增量,预计运维三年,怎么优化?
  39. 对于大流量的网站,您采用什么样的方法来解决各页面访问量统计问题?
  40. 如何进行SQL优化?(关于后边的解释同学们可以进行理解,到时根据自己的理解把大体意思说出来即可)
  41. 为表中得字段选择合适得数据类型(物理设计)
  42. 存储时期

解决

MySQL的复制原理以及流程基本原理流程,3个线程以及之间的关联

MySQL中myisam与innodb的区别,至少5点

MySQL中varchar与char的区别以及varchar(50)中的50代表的涵义

(1). varchar与char的区别 (2). varchar(50)中50的涵义 (3). int(20)中20的涵义 (4). mysql为什么这么设计
事务

问了innodb的事务与日志的实现方式

(1). 有多少种日志;  
(2). 事物的4种隔离级别  (3).事务是如何通过日志来实现的,说得越深入越好。

问了MySQL binlog的几种日志录入格式以及区别

1). binlog的日志格式的种类和分别 (2). 适用场景; 结合第一个问题,每一种日志格式在复制中的优劣。

问了下MySQL数据库cpu飙升到500%的话他怎么处理?

1. 查看日志
2. 查看当前进程
3. 没有经验的,可以不问;  (2). 有经验的,问他们的处理思路。

sql优化 (1). explain出来的各种item的意义; (2). profile的意义以及使用场景;

1. 语句类型
2. 索引
3. 行数

备份计划,mysqldump以及xtranbackup的实现原理

(1). 备份计划;  
(2). 备份恢复时间;  
(3). xtrabackup实现原理

mysqldump中备份出来的sql,如果我想sql文件中,一行只有一个insert…value()的话,怎么办?如果备份需要带上master的复制点信息怎么办?

500台db,在最快时间之内重启

innodb的读写参数优化 (1). 读取参数 (2). 写入参数; (3). 与IO相关的参数; (4). 缓存参数以及缓存的适用场景。

你是如何监控你们的数据库的?你们的慢日志都是怎么查询的?

阿里的during,有提供看板

你是否做过主从一致性校验,如果有,怎么做的,如果没有,你打算怎么做?

你们数据库是否支持emoji表情,如果不支持,如何操作?

utf8-mb4

你是如何维护数据库的数据字典的?

1. 注释
2. 字典表

你们是否有开发规范,如果有,如何执行的

表中有大字段X(例如:text类型),且字段X不会经常更新,以读为为主,请问 (1). 您是选择拆成子表,还是继续放一起; (2). 写出您这样选择的理由。

join会有性能消耗
不拆

MySQL中InnoDB引擎的行锁是通过加在什么上完成(或称实现)的?为什么是这样子的?

for update,根据主键、唯一键

如何从mysqldump产生的全库备份中只恢复某一个库. 某一张表?

开放性问题:据说是腾讯的 一个6亿的表a,一个3亿的表b,通过外间tid关联,你如何最快的查询出满足条件的第50000到第50200中的这200条数据记录。
2. SQL语言包括哪几部分?每部分都有哪些操作关键字?
3. 完整性约束包括哪些?
4. 什么是事务?及其特性?
5. 什么是锁?
6. 什么叫视图?游标是什么?
7. 什么是存储过程?用什么来调用?
8. 索引的作用?和它的优点缺点是什么?
9. 如何通俗地理解三个范式?
10. 什么是基本表?什么是视图?
11. 试述视图的优点?
12. NULL是什么意思
13. 主键、外键和索引的区别?
14. 你可以用什么来确保表格里的字段只接受特定范围里的值?
15. 说说对SQL语句优化有哪些方法?(选择几条)
16. SQL语句中‘相关子查询’与‘非相关子查询’有什么区别?
17. char和varchar的区别?
18. Mysql 的存储引擎,myisam和innodb的区别。
19. 数据表类型有哪些
20. MySQL数据库作发布系统的存储,一天五万条以上的增量,预计运维三年,怎么优化?
21. 对于大流量的网站,您采用什么样的方法来解决各页面访问量统计问题?
22. 如何进行SQL优化?(关于后边的解释同学们可以进行理解,到时根据自己的理解把大体意思说出来即可)
23,为表中得字段选择合适得数据类型(物理设计)
24:存储时期

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL基础汇总 的相关文章

  • Golang调用FFmpeg转换视频流

    问题背景 问题背景是在 xff0c 由于视频采集端使用的是H264编码采集的裸流 xff0c 而网络流媒体大多是以FLV为主的直播方式进行的 xff0c 为了实现实时直播 xff0c 当前是打算直接使用FFmpeg将H264裸流实时转成FL
  • 【Deepin Debian 系统安装RPD远程桌面工具Remmina】

    Remmina 是一款在 Linux 和其他类 Unix 系统下的自由开源 功能丰富 强大的远程桌面客户端 xff0c 它用 GTK 43 3 编写而成 它适用于那些需要远程访问及使用许多计算机的系统管理员和在外出行人员 它以简单 统一 同
  • Linux部署yapi

    一 安装node 1 获取资源node资源 8 x版本 curl sL https rpm nodesource com setup 8 x bash 耐心等待 2 安装nodejs yum install y nodejs 3 查看nod
  • vim环境设定:~/.vimrc(语法高亮等一些的设置)

    Centos里的VI只默认安装了vim minimal xff0d 7 x 所以无论是输入vi或者vim查看文件 xff0c syntax功能都无法正常启用 因此需要用yum安装另外两个组件 xff1a vim common 7 x和vim
  • HTML中meta标签都有什么作用?

    一直以来 xff0c 对HTML中的meta标签一知半解 xff0c 这次抽时间好好总结一下 meta标签 定义 xff1a meta元素提供有关页面的元信息 meta information 比如针对 搜索引擎和更新频度的描述和关键词 搜
  • 自增运算符的用法

    a 43 43 和 43 43 a 都属于自增运算符 a 43 43 是先进行取值 xff0c 后进行自增 43 43 a是先进行自增 xff0c 后进行取值
  • 使用七牛云CDN加速并绑定阿里云域名详细教程

    昨天晚上在某个群里看到群友问 xff0c 七牛云能不能绑定自己的域名作为静态资源文件的前缀 xff0c 忽然想起来我已经有快两年时间没有登录过我的七牛云账号了 xff0c 不禁老脸一红 xff0c 这是有多久没有自己前后端都弄了 xff0c
  • 一些中间件的思维导图

    一些中间件的思维导图 文章目录 一些中间件的思维导图写在前面Redis博客连接Redis的应用 分布式锁Redis的基础Redis的生产问题 缓存雪崩 缓存穿透 双写一致性 并发竞争Redis的cluster集群Redis的replicat
  • VS2012 下配置gsl-1.8库

    GSL的安装配置如下 xff1a 1 下载安装 从http gnuwin32 sourceforge net packages gsl htm 下载安装gsl 1 8 exe和gsl 1 8 src exe两个exe文件 下载好后如下图 x
  • 一种初始化结构体数组的方法

    typedef struct int requestNumber void dispatchFunction Parcel amp p struct RequestInfo pRI int responseFunction Parcel a
  • OpenCV学习笔记——新版本的数据结构core

    2 0新版本对数据结构进行了大幅修改 xff1a 定义了DataType 类 定义了Point 模板类 xff0c 取代了之前版本的CvPoint CvPoint2D32f Point 类不用多言 xff0c 里面两个成员变量x xff0c
  • Java面向对象中类与对象的概念和使用(一)

    方法创建与重载 1 方法就是一段可以重复调用的代码段 2 定义格式 xff1a 访问修饰符 返回值类型 方法名 1 方法重载 xff1a 方法名称相同 xff0c 但是参数的类型和个数不同 xff0c 通过传递参数的个数和类型不同来完成不同
  • CCF-CSP考试介绍以及复习技巧指导

    CCF CSP考试时间及费用 时间一般是每年3 9 12月的中旬 xff0c 报名时间一般也是提前一个月 xff0c 不固定 非计算机协会会员300元 次 xff0c 会员180元 次 xff08 学生会员需缴纳50元 年的会费 xff09
  • 知根知底:Flink-KafkaConsumer 详解

    Flink Kafka Connector 是连接kafka 的连接器 xff0c 负责对接kafka 的读写 xff0c 本篇主要介绍kafka consumer 的执行流程与核心设计 逻辑执行流程 分配当前task消费的partitio
  • debian下添加环境变量

    1 添加临时环境变量方法 xff1a export PATH 61 PATH usr local 你的环境变量路径 2 添加永久环境变量 cd 打开文件 gedit bashrc 在 bashrc文件末尾添加如下 xff1a PATH 61
  • STM32F407学习笔记——GPIO_按键控制LED亮灭

    include lt stm32f4xx h gt include 34 stm32f4xx conf h 34 include 34 delay h 34 GPIO TypeDef io led 61 GPIOC 定义一个指向结构体 sp
  • ARM 安装中文输入法

    TX2 为嵌入式开发板 xff0c 系统架构为ARM xff0c 普通的PC上的Linux系统安装中文输入法的方法不适用 xff0c 所以这里提供ARM上的中文输入法的安装方法 步骤1 xff1a 打开终端 xff0c 输入以下命令 sud
  • ElasticSearch基础、分布式架构及读写流程

    ElasticSearch 文章目录 ElasticSearch基础概念IndexTypeMapperDocumentField 读取中的概念getqueryfilter DSL 分布式架构名词概念primary shardreplica
  • Deepin下apt安装node.js和npm

    写在前面 折腾了一下午 xff0c 发现怎么装node js和npm都不能安装上 xff0c 也不能使用命令 xff0c 开始以为是官方源版本太老 xff0c 后来换了阿里源也是一样 root 64 baike PC home baike
  • windows下,vscode配合pyenv-win使用python虚拟环境

    vscode安装python插件 安装pyenv win xff0c 推荐使用chocolatey安装 pyenv安装需要的python版本 xff0c 安装后需要pyenv rehash 创建工程文件夹 在文件夹中输入 pyenv loc

随机推荐