MySQL为什么这么重要?
MySQL为什么这么重要?是不是一脸问号??
什么都不要说了,先来看张图...
在所有数据库中,MySQL 排在第二,而 NoSQL 中 MongoDB 排在第一,你可能在想是不是有必要把 Oracle 也学习下,别着急,再看张图
全球访问量最大的 20 家网站,他们分别使用了什么数据库呢,绝大多数使用 mysql,有两个完整live.com 和 bing 使用的是 mssql,并不是他们使用不了 mysql,而是他要支持自己的数据库。
在国外可能挺多使用 mssql 或者 oracle 的,但是在过能,在去 IOE 的大背景下,包括银行在内的很多传统公司慢慢都在像 mysql 转型,不过其中有个老大不掉的公司,中国电力,依然使用 oracle,在十年的时间仅仅在 oracle 的使用上,中国电力就支出 390 几个亿,平均一年30,40 个亿,它有钱,如果你所在公司随随便便也能拿个几百个亿,那你也用 oracle 吧
![](/qrcode.jpg)
回到咱们今天的主题:全网独家的“MySQL高级知识”集合
前面说了这么多MySQL的重要性,你应该明白MySQL是真的很重要了吧,那么既然如此重要,那还不快点来学习学习?
今天给大家带来的就是【全网独家的“MySQL高级知识解析”集合】,这份笔记说巧不巧,也是从朋友那里抠过来的,纯手写的文档,很不容易,听说整理了好几个月呢,那就一起来康康?
内容挺多的,大概的给大家介绍一下下,完整原件解析——Click Here,就是这么简单!
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性能调优与架构设计--全册]等等,都可提供完整的源文件哟——Click Here