【Mysql】高级
一、MySql介绍与安装
1.1 CentOS安装Mysql
1.2 修改默认配置文件
/usr/share/mysql/my-huge.cnf 文件即mysql的默认配置文件,为了不破坏这个文件,我们copy一份出来叫做 my.cnf
修改字符集,编辑 my.cnf
注意:对于原来创建过的database,可能中文字符还会乱码,可以重新创建一个database
1.3 主要配置文件
-
二进制日志文件 log-bin :主要用于主从复制
-
错误日志 log-erro :默认是关闭的,记录严重的警告和错误信息,每次启动和关闭的信息等。
-
查询日志log : 默认关闭,记录查询的sql语句,开启后可能会降低mysql性能,因为记录日志也会消耗系统资源。
1.4 MySQL 逻辑架构
- 总体概览
1.5 存储引擎
二、索引优化
2.1 SQL慢问题
索引:把我们经常查询的字段建立索引,这样在大量查询发生时可以提高查询的效率。
单值索引:
复合索引:
2.2 Join查询
2.3 索引介绍
MySQL官方定义:索引index,是帮助MySQL高效获取数据的数据结构。索引是一种数据结构。
可以简单理解为“排好序的快速查找数据结构”。
结论:
数据本身之外,数据库还维护着一个满足特定查找算法的数据结构,这些数据结构以某种方式指向数据。这样就可以在这些数据结构的基础上实现高级查找算法。这种数据结构就是索引。
一般来说,索引也很多,通常会以索引文件形式存储在磁盘上。
平常我们说的索引,荣国没有特别指明,都是B树结构组织的索引,(多路索引搜索树,不一定是二叉索引)。
复合索引,前缀索引,唯一索引默认都是使用B+树索引,统称索引。当然除了,B树索引以外也有哈希索引。
2.4 索引分类
✔添加索引的语法
2.5 索引结构
2.6 索引性能分析
explain
查询出的性能分析结果含有如下字段
id
select_type
table
type
possible_keys
key
key_len
ref
rows
Exetrs
id:
select_type
type
possible_keys
显示可能用在这张表中的索引,可能有一个也可能有多个。
若这次查询中的字段中如果存在索引,则该索引将被列出来,但是该索引不一定被查询实际使用。
简言之:就是可能会被用到的索引。MySQL告诉用户这张表的本次查询理论上会用到哪些索引,key
中是本次查询实际用的的所引。
实际被用到的索引由key
key
key_len
表示索引中使用的字节数,也就是查询中使用的索引的索引长度,在不损失精度的前提下,该值越小越好。
key_len 显示的值为索引字段的最大可能长度,而非实际使用长度。即key_len 是通过表定义计算而得出的,而不是通过检索实际值而得得。
ref
显示索引的哪一列被使用了,如果可能的话,是一个常数。哪些列或常量被用于查找索引列上的值。
简言之:索引到底有没有被充分使用,比如t1创建了索引,t1 创建了索引 idx_col1_col2, 该索引被 t2.col1检索时充分使用
所以 ref:shared.t2.col1 ,const
rows
根据表统计信息以及索引选用的情况,大致估算找到所需的记录需要读取的行数。
Exetrs
十分重要的额外信息
练习
三、索引优化案例
3.1 单表优化案例:文章分类评论观看量
3.2 两表优化案例:class与book
book:id,card
class:id,card(card的数值表示所属的一个分类)
3.3 三表优化案例:join的使用
四、索引失效(避免)
4.1 索引失效的原因
索引失效的可能原因:
4.2 小总结
in、or、通配符、不等于、可以试试覆盖索引解决索引失效。
4.3 面试题
五、慢查询优化
5.1 小表驱动大表
in 与 exists
5.2 排序优化
order by
第一步:建表,建索引
以前我们explain都是在测试有没有使用到索引、以及避免索引失效。
这次我们的关注点是 fileSort,它与 排序 order by又息息相关。
5.3 慢查询日志
mysqldumpslow:日志分析工具
5.4 批量数据脚本
- 修改配置参数,创建函数
3. 创建函数
- 创建存储过程,往表中插入大量数据
5.调用存储过程
5.5 show profile
开启profiling功能后,后台会开启自动抓取sql语句的执行情况,保存下来。
全局查询日志
六、MySQL锁机制
6.1 概念
- 什么是锁
-
锁分类
对数据操作得类型分:
-
读锁:共享锁
-
写锁:排它锁
对锁得粗细粒度分
- 表锁
- 行锁
- 页锁
6.2 表锁
读锁案例1
写锁案例2
如何查看那些表被加锁,以及锁定得状况