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高级知识”集合】,这份笔记说巧不巧,也是从朋友那里抠过来的,纯手写的文档,很不容易,听说整理了好几个月呢,那就一起来康康?
内容挺多的,大概的给大家介绍一下下,完整的原文档请注意【free download--please 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. 作业
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 安装
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
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调优与面试吧..不论是哪一个笔记文档都可找小编免费分享啦,【free download--please click here】
阿里P8MySQL面试必备哪些知识点?
先从基础开始?(抽取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.为什么要用前缀索引?
Miffy
可是那个啥,不是说春节有两天是年假?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道)
日志问题(抽个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]等等,都可提供完整的源文件哟~【free download--please click here】