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