默认数据库
- mysql
- infomation_schema
- performance_schema
- sys
grant,赋予权限。
revoke,收回权限。
grant 语句都同时修改mysql表和内存数组,不需要使用flush privileges来刷新权限。
查询缓存
show variables like "%query_cache%"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
- addBatch,设置不自动提交(开启事务),开启预编译。需要设置useServerPrepStmts=true,才会开启预编译功能。下面这个是未设置useServerPrepStmts=true的。

设置了useServerPrepStmts=true,开启预编译。
- addBatch,设置不自动提交(开启事务),不开启预编译。

- insert,设置自动提交。

- insert,设置不自动提交。

- 多值合并插入
SET GLOBAL max_allowed_packet = 4194304;
设置服务器一次性最大收到包的大小,jdbc驱动会判断,如果一次提交的包大于服务器设置的包大小,会将sql语句拆分成多条,然后执行。
防止sql注入
PreparedStatement 对变量进行了参数化,对于可能用到的sql关键字进行了转义(如insert,update,select),防止sql注入。
批处理
- jdbc 批处理。
- mybatis的批处理。
- mybatis-plus的批处理。
连接参数优化
useServerPrepStmts,使用服务端预编译参数。
cachePrepStmts,缓存预编译参数。
rewriteBatchedStatements,将多条语句一次性发送给数据库,连接字符串会有长度限制。
其它
show engine innodb status。
innodb buff pool size。
lru 算法,young区,old区,5:3的比例,
MRR 顺序读,随机读
BKA join buffer
