Mysql 笔记

1、mysql如何避免alter table锁表?
Mysql 5.6版本及以上引入了Online DDL功能
第三方 PT Online Schema Change工具

2、ACID
原子性、一致性、隔离性、持久性 https://blog.csdn.net/qq_41056506/article/details/81779772

3、MVCC
提高并发性能:读操作不会阻塞写操作,写操作也不会阻塞读操作,有效地提高数据库的并发性能。
降低死锁风险:由于无需使用显式锁来进行并发控制,MVCC可以降低死锁的风险。
MVCC主要就是为了实现读-写冲突不加锁,而这个读指的就是快照读,是乐观锁的实现
这篇博文写的很清楚:https://zhuanlan.zhihu.com/p/676793594

4、如何发现慢查询 开启mysql慢查询日志

show variables like 'slow_query_log%';
show variables like 'long_query_time%';
set global slow_query_log = ON;
set global long_query_time = 2;

查看日志

mysqldumpslow -s t -t 10 -g 'select' D:/xx

5、分析单条查询

set profiling  = 1;
select * from chapter;
show profiles ;

6、alter、modify、change column 的区别
https://www.modb.pro/db/611527

7、B树
https://cloud.tencent.com/developer/article/1924404

8、项目经验 1、语音评测,wav文件深度问题 2、短视频项目 https://zhuanlan.zhihu.com/p/493630514

9、在同一张表查询和更新

update wy_chapter inner join (
    select * from wy_chapter
    ) as c using (chapter_id)
set chapter_name = 'chapter_name_1'

10、count(1) , count(id), count()
count(
)‌:这个表达式会统计表中的所有行,包括那些列值为NULL的行。count(*)会考虑表中的每一行,不会忽略任何列的值。
count(1)‌:这个表达式也会统计表中的所有行,包括列值为NULL的行。虽然名为count(1),但实际上它并不关心列的具体值,只是用一个常数1来代表每一行进行计数。
count(列名)‌:这个表达式只统计特定列的非NULL值。如果该列有NULL值,这些行不会被计入总数。这意味着,只有当列值为非NULL时,该行才会被计入总数。

11、MySQL 的 Binlog 有有几种录入格式 有三种格式,statement,row 和 mixed。

  • statement 模式下,每一条会修改数据的 SQL 都会记录在 Binlog 中。不需 要记录每一行的变化,减少了 Binlog 日志量,节约了 IO,提高性能。由于 sql 的执行是有上下文的,因此在保存的时候需要保存相关的信息,同时还 有一些使用了函数之类的语句无法被记录复制。
  • row 级别下,不记录 SQL 语句上下文相关信息,仅保存哪条记录被修改。记 录单元为每一行的改动,基本是可以全部记下来但是由于很多操作,会导 致大量行的改动(比如 alter table),因此这种模式的文件保存的信息太 多,日志量太大。
  • mixed,一种折中的方案,普通操作使用 statement 记录,当无法使用 statement 的时候使用 row。

12、mysql面试题

13、mysql 组件 https://zhuanlan.zhihu.com/p/678814714 连接器 分析器 优化器 存储引擎

14、如何查看空闲链接列表 show processlist;

results matching ""

    No results matching ""