1.安装

看这位CSDN大佬:mysql-linn

image.png

mysql的启动与停止

安装地址 /usr/local/mysql/bin
image.png

Root密码设置与开启自启动

1.修改密码

image.png

2.连接数据库

image.png

3.登入mysql

image.png

4.查看是否设置开机启动 (没有chkconfig mysql on)

image.png

5设置数据库的字符集

1.拷贝配置文件到/etc下
image.png
image.png
2.字符集错误
image.png
3.查看字符集
image.png
4.修改
修改my.cnf文件 百度修改字符集方法把配置文件粘贴;

2.mysql的目录

image.png
image.png
image.png

MySQL的架构

image.png
image.png
image.png

3.MySQL性能调优

1.MySQL性能下降的主要原因

image.png

2.常见的join查询

1.sql执行顺序

image.png
总结:
image.png

2.sql joins

  1. 内连接

image.png
2.左连接
image.png
3.右连接
image.png
4.左外连接
image.png
5.右外连接
image.png
6.全连接
image.png
7.
image.png

演示:
默认的两张数据库:
image.png
image.png
内连接:
image.png
左连接:
image.png
右连接
image.png
独A表
image.png
独B:
image.png
全有:
image.png
image.png
全没有:
上面条件上各加is null;

4.什么是索引

1.官方定义

image.png
image.png

2.索引是什么

是高效获取数据的数据结构,是排好序的快速查找数据结构。
image.png
image.png

3.索引的优势和劣势

image.pngimage.png

5.索引的分类和使用

1.单值索引

image.png

2.唯一索引

image.png

3.复合索引

image.png

4.基本语法

image.png

1.查看索引

image.png

2.添加索引的4种方式

image.png

5.MySQL索引结构 (BTree树)

1.索引原理
image.png
image.png
image.png

6.那些情况下需要创建索引

image.png

7.哪些情况不需要索引

  1. 数据量太小 300万以下MySQL扛得住
  2. 经常要修改的表
  3. 数据值单一,有许多重复的内容

    6.重点 MySQL的性能分析

    1.MySQL常见瓶颈

    image.png

    2.explain (执行计划)

    image.png
    image.png

    3.语法 (explain + sql语句)

    image.png

    4.名词段解释

    1. id

    image.png
    image.png
    image.png
    image.png

    2.select_type

    1.有哪些
    image.png
    2.都是什么意思
    image.png

    3.type

    image.png
    image.png
    image.png

    4. possible_keys 和 key

    image.png
    image.png

    5.key_len

    image.png

    6.ref

    image.png
    image.png

    7.rows

    image.png

    8.Extra

    image.png
    image.png
    image.pngimage.png
    image.png

9.小练习

image.png
image.png

7.索引的优化案例

1.关于取值范围为索引导致的索引失效 sortfile提示

数据库表:
image.png
要求:
image.png
查询语句:
image.png
explain结果:
image.png
新建索引
image.pngimage.png
explain分析
image.png
原因:因为取值是范围 所以用不上索引 出现文件内排序
删除,再键索引
image.png
image.png

2.关于join连接产生的索引失效

左连接查询
image.png
book建索引,查询。(左连接索引加右表)
image.png
class表建索引(左连接加左表)
image.png
image.png

3.关于三表查询键索引

class left book left phone 没建索引前分析的情况
image.png
class left book left phone 建索引后分析的情况
image.png
image.png

8.索引的优化和避免索引失效

索引优化口诀:
全值匹配我最爱,最左前缀要遵守;
带头大哥不能死,中间兄弟不能断;
索引列上少计算,范围之后全失效;
Like百分写最右,覆盖索引不写星;
不等空值还有or,索引失效要少用;
VAR引号不可丢,SQL高级也不难!

image.png

索引优化1:最佳左前缀法则

全值匹配我最爱,最左前缀要遵守;
带头大哥不能死,中间兄弟不能断;
创建的组合索引(这里是创建了name,age,pos)
image.png
1.最好的情况就是我们 按照索引的顺序查找
image.png
2.使用索引的第一个也不会失效
image.png
3.跨过索引第一个,直接查索引第二个 失效
image.png
4.使用索引第一位和第三位 (中间兄弟不能断)这里索引只用到了一个image.png
image.png

索引优化2:索引列上少计算

1.正常情况下索引正常
image.png
2.索引列上计算 索引失效
image.png

索引优化3:范围之后全失效

正常情况
image.png
判断age使用到了范围 变为了一个范围的查找 之后的索引都会失效
image.png

索引优化4:覆盖索引不写星

正常情况:
image.png
不带星 性能更好
image.png
不带* 取值范围通过检索索引里的 也会增强效率
image.png
image.png

索引优化5:不等空值还有or,索引失效要少用;

正常情况下 使用 =
image.png
使用 != 索引失效
image.png
使用 is not null 或者 is null 也会导致索引失效
image.png

索引优化6:Like

使用 like 索引失效 使用Like查询 百分号最好在后边
image.png
image.png
如果非要使用%% 那么可以创建覆盖索引

索引优化7.varchar类型引号问题

有引号image.png
无引号image.png

测试:

image.png9索引面试题分析

image.png
image.png
image.png
image.png

  1. 在常量查询内没有按照索引顺序 索引也不会失效 会优化

image.png
image.png

  1. 使用范围查找 查找后面的索引会失效

image.png

  1. 使用范围 顺序也颠倒了 之后范围索引后面的会失效 (顺序MySQL会调优)

image.png

  1. 中间断了 但是加了排序

image.png
5. 加了排序 和上面一样
image.png

  1. 中间断了 出现排序异常

image.png

  1. 只用c1一个字段 但是c2,c3用于排序 无filesort

image.png

  1. order by 没有按照索引顺序写 会索引失效 出现filesort

image.png

  1. c2和排序c2 重复 也不会出现异常、

image.png

  1. c1 c2用于查询 c2,c3用于排序 无filesort

image.png

  1. order by 没有按照顺序排序 都会出现filesort 但是如果排序字段已经是常量 那么不会索引失效

image.png

  1. 使用group by 索引就会失效 本身也会失效

image.png

  1. 分组 并且 索引顺序颠倒 灭绝师太!!!!

image.png
image.png
image.png
image.png

10. 查询截取分析

image.png
image.png

1. in和exists

一定要小表驱动大表
image.png
image.png in的写法
image.png
exists的写法法image.png

2.为排序使用order by 优化

1.建表
image.png
2.示例
image.png
order by 也是排序 当排序的值和索引一致时 可以使用索引 当大哥没了 或者中间断了 就会filesort
image.png
排序时 和索引的位置不一样 也会导致索引失效
image.png
带头大哥没了索引失效 只要带头大哥没有了 索引就会失效
image.png
order by 默认升序 如果一升一降就会失效
image.png
image.png
image.png

3.group by优化

image.png

4.慢查询日志

image.png
image.png
image.png

开启慢查询日志:

  1. 查询是否开启 一般除了性能调优 不会开启 他会有一点性能的损耗

image.png

  1. 开启 并做设置

image.png
image.png
image.png
image.png
查询启动查询
image.png

  1. 查看超时sql

image.png
image.png
image.png

2.批量插入脚本

image.png
随机产生字符串函数
image.png
image.png
创建存储过程:
image.png
image.png
调用存储过程存数据;

5.Show Profile

image.png
1.开启
image.png
2.开启:
image.png
3.运行sql
随便运行
image.png
image.png
4.查询执行过的sql
image.png
5.诊断
image.png
6.参数备注
image.png
看到这几个就严重了:
image.png

6.全局查询日志

image.png

11.数据库锁理论概述

1.什么是锁

image.png

2.三锁

1.表锁(偏读) :

image.png

2.行锁(偏写)

3.页锁(介于两者之间)

3.表锁读锁的案例讲解(MyISAM引擎)

1.查看表的加锁情况
image.png
2.创建锁
读锁
image.png
写锁
image.png
现在锁已经被创建了
image.png
3.解锁
image.png

1.加了读锁之后 读操作

本客户端
image.png
其他客户端也可以查
image.png

2.加了读锁后写操作

1.本客户端写被锁住
image.png
同时还不可以读别的表
image.png
2.其他客户端 被阻塞
image.png
但是可以读
image.png

3.表锁写锁的案例讲解

加写锁
image.png
1.自己可以写自己的锁表
image.png
2.自己可以读自己的锁表
image.png
3.自己也不能读其他的表
image.png
1.其他可不可以读其他表
image.png
2.其他不可以读锁表
image.png
3.其他不可以修改锁表
image.png

4.表锁读锁写锁结论

image.png

image.png
分析表锁定
image.png
image.png
image.png

4.行/锁案例讲解(InnoDB)

image.png
事务的ACID属性:
image.png

1.行锁的基本演示:

行锁就是连个同时修改同一行数据,当一方修改未提交时,另一方修改会导致阻塞;
image.png
2.两个客户端操作同一个表的不同行,不会被锁

2.无索引行锁升级为表锁

1.给varchar类型不加引号 导致索引失效 升级为表锁
image.png
2.在其他一个地方修改不同的行 导致锁住
image.png

5.间隙锁的危害

image.png
范围修改 2-6 但是,没有2;他会把范围内的都锁柱
image.png
这里添加2 被锁住
image.png

6.如何锁定一行

image.png
锁住一行:
image.png
其他修改,被锁住
image.png
被锁住的提交以后其他的才会执行
image.png

7.案例结论

image.png
image.png
image.png
image.png

12.主从复制

1.复制的原理

image.pngimage.png

2.复制的规则

image.png
windows:
image.png
image.png
image.png
image.png
image.png
image.pngimage.png
image.png
image.png
Linux:
image.png
image.png
image.png
注释:
image.png
image.png
image.png
在windows创建账户授权save
image.png
image.png
image.png
image.png
linux
image.png
image.png
image.png
image.png