MySQL性能优化

2024/7/15·1 views

查看状态

MySQL 使用一系列默认配置预先配置的,但随着需求增加,往往需要重新调整分配内存,缓冲区等等。可以使用下面的命令查看变量以及状态

复制代码
show [global] variables;
show status;

当你遇到MySQL性能显著不良的时候,可以使用

复制代码
show [full] processlist

查看活动以及他们的线程id和执行时间,可以使用kill 来终止

使用explain [analyze] 来解释如何执行一条SQL

一般来说,存储过程比一条一条执行SQL性能好

insert 支持一个可选的 delayed 关键字,如果使用,将把控制立即返回给调用程序,并且一旦有可能就实际执行该操作

在导入数据时,应该关闭自动提交,临时禁用索引,索引在导入完成后再开启

复制代码
alter table notes disable/enable keys;

如果SQL存在大量OR,可以尝试使用union关键字连接结果

索引可能会加快查询,也可能会降低插入,更新速度

一般来说,尽量使用fulltext 而不是用like

profile 分析

sql 复制代码
set profiling=1; -- 打开
-- 执行sql
show profiles; -- 查看
show profile [type] for query 1 [limit m offset n]; -- 查看query id 是1 的profile详细信息。type可以是all等

例如

复制代码
show profile CPU,BLOCK IO for query 1; 

参考:https://blog.csdn.net/ty_hf/article/details/54895026

导入性能优化

对于myisam引擎的表,可以先关闭索引,导入完成后开启索引,还可以取消唯一性检查和自动提交来提高插入速度

sql 复制代码
set unique_checks=0
set autocommit=0
alter table <table> disable/enable keys; -- 关闭/开启索引

对于导入大量数据到一个空的Myisam表,默认就是先导入数据然后才创建索引的,所以不用进行设置

对于innodb,数据是按照主键顺序保存的,如果有主键,可以有效提高导入效率,如果没有主键,则默认创建一个内部列作为主键。可以关闭唯一性检测,关闭自动提交进行导入

快来和小猫聊天吧~