MySQL为什么这么重要?

MySQL为什么这么重要?是不是一脸问号??

 

什么都不要说了,先来看张图...

 

在所有数据库中,MySQL 排在第二,而 NoSQL 中 MongoDB 排在第一,你可能在想是不是有必要把 Oracle 也学习下,别着急,再看张图

 

全球访问量最大的 20 家网站,他们分别使用了什么数据库呢,绝大多数使用 mysql,有两个完整live.com 和 bing 使用的是 mssql,并不是他们使用不了 mysql,而是他要支持自己的数据库。

在国外可能挺多使用 mssql 或者 oracle 的,但是在过能,在去 IOE 的大背景下,包括银行在内的很多传统公司慢慢都在像 mysql 转型,不过其中有个老大不掉的公司,中国电力,依然使用 oracle,在十年的时间仅仅在 oracle 的使用上,中国电力就支出 390 几个亿,平均一年30,40 个亿,它有钱,如果你所在公司随随便便也能拿个几百个亿,那你也用 oracle 吧

回到咱们今天的主题:全网独家的“MySQL高级知识”集合

前面说了这么多MySQL的重要性,你应该明白MySQL是真的很重要了吧,那么既然如此重要,那还不快点来学习学习?

今天给大家带来的就是【全网独家的“MySQL高级知识”集合】,这份笔记说巧不巧,也是从朋友那里抠过来的,纯手写的文档,很不容易,听说整理了好几个月呢,那就一起来康康?

内容挺多的,大概的给大家介绍一下下,需要完整的原文档 点击这里,就是这么简单

1.MySQL的重要性 

略过...关于MySQL的重要性,早在开篇我就已经说过了,这里就不提了(其实前面也是嫖的笔记里的,嘿嘿)

2.MySQL 安装

  • 2.1. 准备工作
  • 2.2. 单实例安装
  • 2.3. 多实例安装

 

3.Mysql 权限

  • 3.1. 最简单的MySQL权限
  • 3.2. 深入研究下 MySQL 权限
  • 3.2.1. 用户标识是什么
  • 3.2.2. 用户权限所涉及的表
  • 3.2.3. Mysql 的角色
  • 3.2.3.1. 准备工作
  • 3.2.3.2. 创建一个角色
  • 3.2.3.3. 创建 2 个开发人员账号
  • 3.2.3.4. 把两个用户加到组里面
  • 3.2.3.5. 给角色 dev_role 应该有的权限
  • 3.2.3.6. 测试

 

 

4.MySql 数据类型

  • 4.1. Int 类型
  • 4.1.1. 有无符号
  • 4.1.2. INT(N)是什么?
  • 4.1.3. 自动增长的面试题
  • 4.2. 字符类型
  • 4.2.1. 排序规则
  • 4.3. 时间类型
  • 4.4. JSON 类型
  • 4.4.1. JSON 入门
  • 4.4.2. JSON 函数
  • 4.4.2.1. json_extract 抽取
  • 4.4.2.2. JSON_OBJECT 将对象转为 json
  • 4.4.2.3. json_insert 插入数据
  • 4.4.2.4. json_merge 合并数据并返回
  • 4.4.2.5. 其他函数
  • 4.5. JSON 索引
  • 4.6. 作业

4.MySql 数据类型 内容详情(部分)

 

5.Mysql 架构

  • 5.1. 体系
  • 5.1.1. 连接层
  • 5.1.2. SQL 处理层
  • 5.1.2.1. 缓存
  • 5.1.2.2. 解析查询
  • 5.1.2.3. 优化
  • 5.2. 逻辑架构
  • 5.3. 物理存储结构
  • 5.3.1. 数据库的数据库(DataDir)
  • 5.3.2. 数据库
  • 5.3.3. 表文件
  • 5.3.4. mysql utilities 安装

5.Mysql 架构 内容详情(部分)

 

6.存储引擎

  • 6.1. MyISAM
  • 6.1.1. 表压缩
  • 6.1.2. 适用场景
  • 6.2. Innodb
  • 6.3. CSV
  • 6.4. Archive
  • 6.5. Memory
  • 6.5.1. 特点
  • 6.5.2. 与临时表的区别
  • 6.5.3. 使用场景
  • 6.6.Ferderated

 

 

7.锁

  • 7.1. 锁的简介
  • 7.1.1. 为什么需要锁?
  • 7.1.2. 锁的概念
  • 7.1.3. MySQL 中的锁
  • 7.1.4. 表锁与行锁的使用场景
  • 7.2. MyISAM 锁
  • 7.2.1. 共享读锁
  • 7.2.2. 独占写锁
  • 7.2.3. 总结
  • 7.3. InnoDB 锁
  • 7.3.1. 语法
  • 7.3.2. 注意
  • 7.4. 锁的等待问题

 

 

8.事务

  • 8.1. 为什么需要事务
  • 8.2. 什么存储引擎支持事务
  • 8.3. 事务特性
  • 8.3.1. 原子性(atomicity)
  • 8.3.2. 一致性(consistency)
  • 8.3.3. 持久性(durability)
  • 8.3.4. 隔离性(isolation)
  • 8.3.4.1. 事务并发问题
  • 8.3.4.2. 未提交读(READ UNCOMMITED)脏读
  • 8.3.4.3. 已提交读 (READ COMMITED)不可重复读
  • 8.3.4.4. 可重复读(REPEATABLE READ)
  • 8.3.4.5. 可串行化(SERIALIZABLE)
  • 8.3.4.6. 间隙锁(gap 锁)
  • 8.4. 事务语法
  • 8.4.1. 开启事务
  • 8.4.2. 事务回滚
  • 8.4.3. 事务提交
  • 8.4.4. 还原点

 

 

9.业务设计

  • 9.1. 逻辑设计
  • 9.1.1. 范式设计
  • 9.1.1.1. 数据库设计的第一大范式
  • 9.1.1.2. 数据库设计的第二大范式
  • 9.1.1.3. 数据库设计的第三大范式
  • 9.1.1.4. 范式设计实战
  • 9.1.1.4.1. 用户登陆及用户管理
  • 9.1.1.4.2. 商品信息
  • 9.1.1.4.3. 供应商管理功能
  • 9.1.1.4.4. 在线销售功能
  • 9.1.1.4.5. 表汇总
  • 9.1.1.4.6. 查询练习
  • 9.1.2. 反范式设计
  • 9.1.2.1. 什么叫反范式化设计
  • 9.1.2.1.1. 商品信息反范式设计
  • 9.1.2.1.2. 在线销售功能反范式
  • 9.1.2.1.3. 查询练习
  • 9.1.3. 总结
  • 9.1.3.1. 范式化设计优缺点
  • 9.1.3.2. 反范式化设计优缺点
  • 9.2. 物理设计
  • 9.2.1. 命名规范
  • 9.2.1.1.1. 数据库、表、字段的命名要遵守可读性原则
  • 9.2.1.1.2. 数据库、表、字段的命名要遵守表意性原则
  • 9.2.1.1.3. 数据库、表、字段的命名要遵守长名原则
  • 9.2.2. 存储引擎选择
  • 9.2.3. 数据类型选择
  • 9.2.3.1.1. 浮点类型
  • 9.2.3.1.2. 日期类型

 

 

10.慢查询

  • 10.1. 什么是慢查询
  • 10.2. 慢查询配置
  • 10.2.1. 慢查询基本配置
  • 10.2.2. 慢查询解读
  • 10.3. 慢查询分析
  • 10.3.1. Mysqldumpslow
  • 10.3.2. pt_query_digest
  • 10.3.2.1. 扩展阅读
  • 10.3.2.1.1. 语法及重要选项
  • 10.3.2.1.2. 分析 pt-query-digest 输出结果
  • 10.3.2.1.2.1.第一部分:总体统计结果
  • 10.3.2.1.2.2.第二部分:查询分组统计结果
  • 10.3.2.1.2.3.第三部分:每一种查询的详细统计结果

 

 

11.索引与执行计划

  • 11.1. 索引入门
  • 11.1.1. 索引是什么
  • 11.1.1.1. 生活中的索引
  • 11.1.1.2. MySql 中的索引
  • 11.1.1.3. 谈下 B+Tree
  • 11.1.1.3.1. 二分查找
  • 11.1.1.3.2. 二叉树(Binary Tree)
  • 11.1.1.3.3. 平衡二叉树(AVL-树)
  • 11.1.1.3.3.1. 平衡二叉树的遍历
  • 11.1.1.3.3.2. 平衡二叉树的旋转
  • 11.1.1.3.4. B+树
  • 11.1.1.3.4.1. B+树的定义
  • 11.1.1.3.4.2. B+树的作用
  • 11.1.1.3.4.3. B+树的扇出(fan out)
  • 11.1.1.3.4.4. B+树的插入操作
  • 11.1.2. 索引的分类
  • 11.1.3. 基础语法
  • 11.2. 执行计划
  • 11.2.1. 什么是执行计划
  • 11.2.2. 执行计划的作用
  • 11.2.3. 执行计划的语法
  • 11.2.4. 执行计划详解
  • 11.2.4.1. ID 列
  • 11.2.4.1.1.Id 相同
  • 11.2.4.1.2.Id 不同
  • 11.2.4.1.3.Id 相同又不同
  • 11.2.4.2. select_type 列
  • 11.2.4.2.1. SIMPLE
  • 11.2.4.2.2.PRIMARY 与 SUBQUERY
  • 11.2.4.2.3.DERIVED
  • 11.2.4.2.4.UNION RESULT 与 UNION
  • 11.2.4.3. table 列
  • 11.2.4.4. Type 列
  • 11.2.4.4.1. System 与 const
  • 11.2.4.4.2. eq_ref
  • 11.2.4.4.3.Ref
  • 11.2.4.4.4.Range
  • 11.2.4.4.5.Index
  • 11.2.4.4.6.All
  • 11.2.4.5. possible_keys 与 Key
  • 11.2.4.6. key_len
  • 11.2.4.6.1. 字符类型
  • 11.2.4.6.1.1.字符类型-索引字段为 char 类型+不可为 Null 时
  • 11.2.4.6.1.2.字符类型-索引字段为 char 类型+允许为 Null 时
  • 11.2.4.6.1.3.索引字段为 varchar 类型+不可为 Null 时
  • 11.2.4.6.1.4.索引字段为 varchar 类型+允许为 Null 时
  • 11.2.4.6.2. 数值类型
  • 11.2.4.6.3. 日期和时间
  • 11.2.4.6.4. 总结
  • 11.2.4.6.4.1. 字符类型
  • 11.2.4.6.4.2. 整数/浮点数/时间类型的索引长度
  • 11.2.4.7. Ref
  • 11.2.4.8. Rows
  • 11.2.4.9. Extra
  • 11.2.4.9.1. Using filesort
  • 11.2.4.9.2. Using temporary
  • 11.2.4.9.3. Using index
  • 11.2.4.9.3.1.覆盖索引
  • 11.2.4.9.4.Using where 与 using join buffer
  • 11.2.4.9.5.impossible where

 

11.索引与执行计划 内容详情(部分)

 

12.SQL 优化

  • 12.1. 优化实战
  • 12.1.1. 策略 1.尽量全值匹配
  • 12.1.2. 策略 2.最佳左前缀法则
  • 12.1.3. 策略 3.不在索引列上做任何操作
  • 12.1.4. 策略 4.范围条件放最后
  • 12.1.5. 策略 5.覆盖索引尽量用
  • 12.1.6. 策略 6.不等于要慎用
  • 12.1.7. 策略 7.Null/Not 有影响
  • 12.1.7.1. 自定定义为 NOT NULL
  • 12.1.7.2. 自定义为 NULL 或者不定义
  • 12.1.8. 策略 8.Like 查询要当心
  • 12.1.9. 策略 9.字符类型加引号
  • 12.1.10. 策略 10.OR 改 UNION 效率高
  • 12.1.11. 测试题
  • 12.2. 批量导入
  • 12.2.1. insert 语句优化
  • 12.2.2. LOAD DATA INFLIE

 

 

以上差不多就是这整份“MySQL高级知识”的大概内容,既然已经谈到MySQL了,那就接着来看看MySQL调优与面试吧..

阿里P8MySQL面试必备哪些知识点?

都在这儿呢(解析),64页...

先从基础开始?(抽取30道)

  • 18.如果把一个 InnoDB 表的主键删掉,是不是就没有主键,就没办法进行回表查询了?
  • 19.执行一个 update 语句以后,我再去执行 hexdump 命令直接查看 ibd 文件内容,为什么没有看到数据有改变呢?
  • 20.内存表和临时表有什么区别?
  • 21.并发事务会带来哪些问题?
  • 22.什么是脏读和幻读?
  • 23.为什么会出现幻读?幻读会带来什么问题?
  • 24.如何避免幻读?
  • 25.如何查看 MySQL 的空闲连接?
  • 26.MySQL 中的字符串类型都有哪些?
  • 27.VARCHAR 和 CHAR 的区别是什么?分别适用的场景有哪些?
  • 28.MySQL 存储金额应该使用哪种数据类型?为什么?
  • 29.limit 3,2 的含义是什么?
  • 30.now() 和 current_date() 有什么区别?
  • 31.如何去重计算总条数?
  • 32.lastinsertid() 函数功能是什么?有什么特点?
  • 33.删除表的数据有几种方式?它们有什么区别?
  • 34.MySQL 中支持几种模糊查询?它们有什么区别?
  • 35.MySQL 支持枚举吗?如何实现?它的用途是什么?
  • 36.count(column) 和 count(*) 有什么区别?
  • 37.以下关于 count 说法正确的是?
  • 38.为什么 InnoDB 不把总条数记录下来,查询的时候直接返回呢?
  • 39.能否使用 show table status 中的表行数作为表的总行数直接使用?为什么?
  • 40.以下哪个 SQL 的查询性能最高?
  • 41.InnoDB 和 MyISAM 执行 select count(*) from t,哪个效率更高?为什么?
  • 42.在 MySQL 中有对 count(*) 做优化吗?做了哪些优化?
  • 43.在 InnoDB 引擎中 count(*)、count(1)、count(主键)、count(字段) 哪个性能最高?
  • 44.MySQL 中内连接、左连接、右连接有什么区别?
  • 45.什么是视图?如何创建视图?
  • 46.视图有哪些优点?
  • 47.MySQL 中“视图”的概念有几个?分别代表什么含义?

索引(抽取30道)

  • 6.索引有几种类型?分别如何创建?
  • 7.主索引和唯一索引有什么区别?
  • 8.在 InnDB 中主键索引为什么比普通索引的查询性能高?
  • 9.什么叫回表查询?
  • 10.如何查询一张表的所有索引?
  • 11.MySQL 最多可以创建多少个索引列?
  • 12.以下 like 查询会使用索引的是哪一个选项?为什么?
  • 13.如何让 like %abc 走索引查询?
  • 14.MySQL 联合索引应该注意什么?
  • 15.联合索引的作用是什么?
  • 16.什么是最左匹配原则?它的生效原则有哪些?
  • 17.列值为 NULL 时,查询会使用到索引吗?
  • 18.以下语句会走索引么?
  • 19.能否给手机号的前 6 位创建索引?如何创建?
  • 20.什么是前缀索引?
  • 21.为什么要用前缀索引?
  • 22.什么情况下适合使用前缀索引?
  • 23.什么是页?
  • 24.索引的常见存储算法有哪些?
  • 25.InnoDB 为什么要使用 B+ 树,而不是 B 树、Hash、红黑树或二叉树?
  • 26.为什么 InnoDB 要使用 B+ 树来存储索引?
  • 27.唯一索引和普通索引哪个性能更好?
  • 28.优化器选择查询索引的影响因素有哪些?
  • 29.MySQL 是如何判断索引扫描行数的多少?
  • 30.MySQL 是如何得到索引基数的?它准确吗?
  • 31.MySQL 如何指定查询的索引?
  • 32.在 MySQL 中指定了查询索引,为什么没有生效?
  • 33.以下 or 查询有什么问题吗?该如何优化?
  • 34.以下查询要如何优化?
  • 35.MySQL 会错选索引吗?
  • 36.如何解决 MySQL 错选索引的问题?

锁(20道)

锁(20道)

日志问题(抽个30道)

  • 11.MySQL 怎么知道 binlog 是完整的?
  • 12.MySQL 中可不可以只要 binlog,不要 redo log?
  • 13.MySQL 中可不可以只要 redo log,不要 binlog?
  • 14.为什么 binlog cache 是每个线程自己维护的,而 redo log buffer 是全局共用的?
  • 15.事务执行期间,还未提交,如果发生 crash,redo log 丢失,会导致主备不一致呢?
  • 16.在 MySQL 中用什么机制来优化随机读/写磁盘对 IO 的消耗?
  • 17.以下说法错误的是?
  • 18.以下说法正确的是?
  • 19.有没有办法把 MySQL 的数据恢复到过去某个指定的时间节点?怎么恢复?
  • 20.MySQL命令和内置函数篇
  • 21.如何用命令行方式连接 MySQL 数据库?
  • 22.关于命令 mysql -h 127.0.0.1 -uroot -P 3307 -p3307 以下说法错误的是?
  • 23.如何创建用户?并给用户授权?
  • 24.如何修改 MySQL 密码?
  • 25.如何使用 SQL 创建数据库,并设置数据库的编码格式?
  • 26.如何修改数据库、表的编码格式?
  • 27.如何使用 SQL 创建表?
  • 28.在 MySQL 命令行中如何查看表结构信息?
  • 29.如何使用 SQL 查看已知表的建表脚本?
  • 30.如何使用 SQL 语句更新表结构?
  • 31.MySQL 有哪些删除方式?有什么区别?
  • 32.如何开启和关闭 MySQL 服务?
  • 33.如何查询当前 MySQL 安装的版本号?
  • 34.如何查看某张表的存储引擎?
  • 35.如何查看当前数据库增删改查的执行次数统计?
  • 36.如何查询线程连接数?
  • 37.如何查看 MySQL 的最大连接数?能不能修改?怎么修改?
  • 38.CHAR_LENGTH 和 LENGTH 有什么区别?
  • 39.UNION 和 UNION ALL 的用途是什么?有什么区别?
  • 40.以下关于 WHERE 和 HAVING 说法正确的是?

调优问题(7道)

 

最后:MySQL性能调优与架构设计--全册

  • 基础篇
  • 第1节:MySQL基本介绍
  • 第2节:MySQL架构组成
  • 第3节:MySQL存储引擎简介
  • 第4节:MySQL安全管理
  • 第5节:MySQL备份与恢复
  • 性能优化篇
  • 第6节:影响MySQLServer性能的相关因素
  • 第7节:MySQL 数据库锁定机制
  • 第8节:MySQL 数据库Query 的优化
  • 第9节:MySQL 数据库Schema 设计的性能优化
  • 第10节:MySQL Server 性能优化
  • 第11节:常用存储引擎优化
  • 架构设计篇
  • 第12节:MySQL 可扩展设计的基本原则
  • 第13节:可扩展性设计之MySQL Replication
  • 第14节:可扩展性设计之数据切分
  • 第15节:可扩展性设计之Cache 与Search 的利用
  • 第16节:MySQL Cluster
  • 第17节:高可用设计之思路及方案
  • 第18节:高可用设计之MySQL 监控

 

 

MySQL就唠嗑到这儿啦,以上所提及的全部MySQL知识笔记,不管是[mysql高级知识笔记],还是[阿里P8MySQL][MySQL性能调优与架构设计--全册]等等,都可提供完整的源文件哟

更多关于Java集合、JVM、多线程并发、spring原理、微服务、Netty 与RPC 、Kafka、日记、设计模式、Java算法、数据库、Zookeeper、分布式缓存、数据结构面试解析+知识点集合等等可以去这个Github链接地址:

https://github.com/ThinkingHan/Java-note 阅读,Star一下吧,感谢支持~