默认数据库

  1. mysql
  2. infomation_schema
  3. performance_schema
  4. sys

grant,赋予权限。
revoke,收回权限。

grant 语句都同时修改mysql表和内存数组,不需要使用flush privileges来刷新权限。

查询缓存

  1. show variables like "%query_cache%"
  2. RESET QUERY CACHE;

预编译

客户端将一条语句发送给服务器之后,服务器总是需要检验SQL语句的语法格式是否正确,然后把sql语句编译成可执行的函数,最后才是执行sql语句,其中校验语法,和编译所花的时间可能比执行sql语句花的事件还要多。

实战

//开启server日志
SHOW VARIABLES LIKE '%general_log%';
SHOW VARIABLES LIKE 'log_output';
SHOW VARIABLES LIKE 'general_log_file';

SET GLOBAL general_log = ON;
SET GLOBAL log_output='table';
select * from mysql.general_log
  1. addBatch,设置不自动提交(开启事务),开启预编译。需要设置useServerPrepStmts=true,才会开启预编译功能。下面这个是未设置useServerPrepStmts=true的。

image.png
设置了useServerPrepStmts=true,开启预编译。
image.png

  1. addBatch,设置不自动提交(开启事务),不开启预编译。

image.png

  1. insert,设置自动提交。

image.png

  1. insert,设置不自动提交。

image.png

  1. 多值合并插入

SET GLOBAL max_allowed_packet = 4194304;

设置服务器一次性最大收到包的大小,jdbc驱动会判断,如果一次提交的包大于服务器设置的包大小,会将sql语句拆分成多条,然后执行。

防止sql注入

PreparedStatement 对变量进行了参数化,对于可能用到的sql关键字进行了转义(如insert,update,select),防止sql注入。

批处理

  1. jdbc 批处理。
  2. mybatis的批处理。
  3. mybatis-plus的批处理。

连接参数优化

useServerPrepStmts,使用服务端预编译参数。

cachePrepStmts,缓存预编译参数。

rewriteBatchedStatements,将多条语句一次性发送给数据库,连接字符串会有长度限制。

其它

show engine innodb status。
innodb buff pool size。
lru 算法,young区,old区,5:3的比例,
MRR 顺序读,随机读
BKA join buffer