0
点赞
收藏
分享

微信扫一扫

MYSQL学习

小龟老师 2022-04-05 阅读 48
mysql

1、MYSQL逻辑架构

在这里插入图片描述1、客户端发送一条查询给服务器
2、服务器先检查查询缓存,如果命中了缓存,则立刻返回缓存的数据结果,否则进入下一阶段
3、服务器端进行SQL解析、预处理,再有优化器生成对应的执行计划
4、MYSQL根据优化器生成的执行计划,调用存储引擎的API来执行查询
5、将结果返回给客户端
备注:MySQL8.0取消了查询缓存

2、Mysql性能的瓶颈

1、慢SQL
2、硬件瓶颈
3、业务增长

3、MYSQL编码

在这里插入图片描述备注:utf8和utf8mb4的区别

4、MYSQL中排序规则

utf8_unicode_ci和utf8_general_ci对中、英文来说没有实质的差别。
utf8_general_ci 校对速度快,但准确度稍差。
utf8_unicode_ci 准确度高,但校对速度稍慢。

utf8_general_ci 不区分大小写,这个你在注册用户名和邮箱的时候就要使用。
utf8_general_cs 区分大小写,如果用户名和邮箱用这个 就会照成不良后果
utf8_bin:字符串每个字符串用二进制数据编译存储。 区分大小写,而且可以存二进制的内容。

5、实用的SQL

1、开启MySQL
service mysql start
2、停止MySQL
service mysql stop
3、重启MySQL
service mysql restart
4、MySQL登录
mysql  -h 127.0.0.1 -uroot -pXXXXXX -P3306
5、退出
exit 
6、系统变量
show variables;
show variables like '%XX%';
SET GLOBAL xxx=xxx;
SET xxx=xxx;
7、状态变量
show status;
show status like '%XX%';
8、修改密码
ALTER user 'root'@'%' IDENTIFIED by 'XXXXXX'
9、展示建表语句
show create table + 表名
10、MySQL查找SQL耗时瓶颈 
SHOW VARIABLES LIKE '%pro%';
SHOW profiles;
SHOW profile  FOR QUERY 94;
11、MySQL查询哪些线程正在运行
show processlist
kill id
MYSQL客户端和服务器之间的通信协议是半双工的
SLEEP:线程正在等待客户端发送新的请求
Query:线程正在执行查询或者正在将结果发送给客户端
Locked:该线程正在等待表锁
Analyzing and statistics :收集存储引擎的统计信息,并生成查询的执行计划
Copying to  tmp table [on disk]:线程正在执行查询,并且将结果复制到一个临时表中
Sorting result:线程对结果集进行排序
Sending data:线程可能在多个状态之间传递数据或者生成结果集或者向客户端返回数据
12、MySQL运行状态
show status;

6、Innodb的数据页

Innodb的数据页是16K,一次最少从磁盘中读取16KB的内容到内存中,一次最少把内存中的16KB内容刷新到磁盘中

7、sql_mode的配置中ONLY_FULL_GROUP_BY

sql_mode的配置中ONLY_FULL_GROUP_BY是开发人员最容易遇到坑,这个设置对SQL语句的要求是:出现在select字段后面的只能是group by后面的分组字段,或使用聚合函数包裹着的字段。
例如下面的SQL语句在select的字段中增加了一个不是group by后的字段后将出错

8、INNODB中的rowid

在INNODB中用户表中的记录比一定都会有rowid ,只有在一个表没有定义主键的时候,也就是需要rowid作聚簇索引时候才会分配给这个表,全局共享一个ID空间

9、MYSLQ的锁

锁粒度:锁定的数量量越小,系统的并发程度越高
读锁、写锁、表锁、行锁
读锁
LOCK TABLE student READ;
写锁
LOCK TABLE student WRITE;
解锁
UNLOCK TABLE;
session1对t表加了write锁,session1可以对t表进行增删改查操作,session2对t表进行查询操作则会陷入阻塞状态,除非session1执行"unlock tables"解锁操作,或者session1关闭客户端连接。
session1对t表加了wred锁,session1,session2对t表进行查询操作,无法进行增删改操作。

10、MYSQL的索引

1、一个索引有两个端组织的,段是逻辑概念,一个段有多个簇构成 一个簇由64个页面构成
2、索引要个个为精,个个有用
3、聚簇索引是顺序结构与数据存储物理结构一致的一种索引,并且一个表的聚簇索引只能有唯一的一条

11、数据库优化

1、查询优化
2、索引优化
3、库表结构优化
4、把查询看成一个任务,那么他是由一些列子任务组成,优化查询的实质的优化子任务,要么消除一些子任务,要么减少子任务执行的次数。
5、优化是为了更快的读和更慢的写。

12、索引类型:

B-tree索引
Hash索引
全文索引

13、B-树和B+数

B-树是高瘦子,B+树是矮胖子
B-树中键的位置不固定,只存储一次,所有数据也只存储一份,节省了空间,但插入删除的操作复杂度增加,性能不平衡
B+树键值存储在节点上,键值对应的数据存储在叶子节点上,B+数检索效率更高

14、物化视图

物化视图(Oracle和sqlserve支持):预先计算并且存储在磁盘上的表,可以通过各种各样的策略刷新和更新,MYSQL并不原生支持物化视图

15、MYSQL优化器选择驱动表

①决定驱动表和被驱动表,需要综合表的数据量大小和表数据的适合访问方式(随机读取或顺序读取)来确定。
②选择返回结果集小的表作为驱动表,包含的两层含义,第一层就是整体表的行数小,第二层是通过where条件后返回的结果集的行数小。
③如果表的数据量较大,且没有索引,那么就不适合多次的随机读取,比较适合一次性的批量读取,就应该作为驱动表。
④STRAIGHT_JOIN功能同join类似,但能让左边的表来驱动右边的表,能改表优化器对于联表查询的执行顺序。
⑤STRAIGHT_JOIN只适用于inner join,并不使用与left join,right join。(因为left join,right join已经代表指定了表的执行顺序)。
⑥尽可能让优化器去判断,因为大部分情况下mysql优化器是比人要聪明的。

16、回表

根据【普通索引】找到 【聚簇索引】,再根据聚簇索引 找到对应的行记录

17、统计点击量的业务设计

传统设计是将点击量存储到一个字段进行串行累加
高并发设计可以设计100行记录,每次随机出一行记录进行类似然后汇总统计

18、数据库的设计

更小更好
简单就好

19、MYSQL配置文件

在这里插入图片描述

举报

相关推荐

MySQL学习

MySql学习

go学习——mysql学习

mysql事务学习

Mysql学习笔记

MySQL学习----(2)

Mysql 学习步骤

【MySQL】学习笔记

0 条评论