image.png

  • show variables like ‘%datadir%’

MySQL - 图2

版本差异

image.png
查看版本:\s

5.7之后【子查询order by无效】

mysql 5.7 5.6排序mysql 5.6升级到5.7之后 子查询里面的order排序无效火锅与理想的博客-CSDN博客

Online DDL

MySQL锁总结

on和where的区别

image.png
<驱动表的全部数据> 关联 <被驱动表符合on的数据>
on的条件可以理解为对驱动表无效
image.png
image.png

【虚拟列】【5.7.8之后】

image.png

利用虚拟列解决collate问题

MYSQL UTF8_bin case insensitive unique index - Stack Overflow

利用虚拟列解决5.7的降序索引

  • 另外添加一个降序的列
  • 利用DATEDIFF函数计算日期差

image.png


【隔离级别】不推荐使用RR而使用RC的理由

  1. RR有间隙锁,产生死锁的概率大
  2. RR不使用索引会锁表,RC会锁行(MySQL做了优化,不满足就释放行锁)
  3. 在RC隔离级别下,半一致性读(semi-consistent)特性增加了update操作的并发性!
    半一致读:不符合update where条件的行都不加锁。而rr是where条件范围全加锁。
    互联网项目中mysql应该选什么事务隔离级别 - 知乎

    RC半一致性读

    image.png
  • innodb_locks_unsafe_for_binlog 参数在 8.0 版本中已被去除(可见,这是一个可能会导致数据不一致的参数,官方也不建议使用了)

    RC配合binglog_format=row格式

    image.png

  • 执行后还有2

  • 日志中session1比session2后提交,del在insert之后,就没有2了。
  • rr的话会间隙锁,insert阻塞,所以rr的statement没问题。rc必须用row。

    Mysql8新特性

  • 再使用查询缓存。

image.png

降序索引

create table slowtech.t1(c1 int,c2 int,index idx_c1_c2(c1,c2 desc));

提升c1 c2 顺序不一致情况,order by c1,c2 desc;
MySQL 8 新特性之降序索引 - iVictor - 博客园
5.7使用虚拟列加正序索引 倒序索引

函数索引

MySQL8.0新特性-慕课网

取消frm文件

innodb内存结构&文件结构

SET PERSIST(mysql 8)【设置永久配置】

image.png
MySQL :: MySQL 8.0 Reference Manual :: 5.1.9.3 Persisted System Variables

  • SET PERSIST语句可以修改内存中变量的值,并且将修改后的值写⼊数据⽬录中的 mysqld-auto.cnf 中。【不修改my.cnf】
  • global级别的

    窗口函数

    SQL优化

    for update nowait:不等锁直接返回

    for update skip locked:跳过被锁的记录

线程池插件

mysql企业版才支持,或者使用Percona mysql(percona的重要区别)
MySQL :: MySQL 5.7 Reference Manual :: 5.5.3.2 Thread Pool Installation

percona线程池

thread_handling = pool-of-threads
image.png
mysql - What is the difference between threads connected and threads running - Database Administrators Stack Exchange
参数:
image.png
MySQL线程池问题个人整理 - 云+社区 - 腾讯云

有了连接池是否还需要线程池?

怕集群?
java数据库连接池都有哪些配置参数?都在这里了! - SegmentFault 思否

mysqld_safe【systemd提供了相同功能】

  • mysqld_safe脚本会在启动MySQL服务器后继续监控其运行情况,并在其死机时重新启动它。

image.png
image.png
MySql 中文文档 - 2.5.10 使用 systemdManagementMySQL 服务器

5.6 升级5.7

image.png
image.png

单机多实例mysqld_multi

image.png
初始化数据库:
image.png
启动:
image.png
查看密码:
image.png

修改字符集(convert to)

ALTER TABLE table1 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;

alter table … convert to ..
注意,这里使用 CONVERT TO 而非 DEFAULT,是因为后者不会修改表中字段的编码和字符集。
使用下面这种不能修改现有数据列的字符集,只对新增列有效。
image.png

pager命令

mysql> pager less PAGER set to ‘less’ mysql> show engine innodb status\G

空格下一页

mysql中pager命令的妙用_heizistudio的专栏-CSDN博客

分布式事务

image.png