本文作者:kris

详解MySQL数据库优化的八种方式(经典必看)-mysql数据库优化的几种方法

kris 2025-01-24 21:11:20 2
详解MySQL数据库优化的八种方式(经典必看)-mysql数据库优化的几种方法摘要: 对mysql数据库表频繁添加删除修改导致数据库卡,怎么优化?不要用delete,可以尝试用下列办法 drop table tblname; -- 彻底删除该表 truncate t...

对mysql数据库表频繁添加删除修改导致数据库卡,怎么优化?

不要用delete,可以尝试用下列办法 drop table tblname; -- 彻底删除该表 truncate table tblname; -- 快速删除数据,但是保存数据结构

mysqlhash分区优化原理?

MySQL的哈希分区优化原理是将数据按照哈希算法进行分区,将相同哈希值的数据放到同一个分区中。这样做可以减轻单个分区的压力,提高查询速度和负载均衡。

同时,哈希分区可以根据实际情况进行调整,比如增加或减少分区,优化数据分配,更好地利用硬件资源,提高系统性能。

mysql优化教程?

1、对SQL语句、索引、表结构等进行优化。

2、开启查询缓存,Query Cache缓存了SELECT查询及其结果数据集,当执行一个同样的SELECT查询时,MySQL会从内存中直接取出结果,加快了查询执行速度、减小了数据库的压力。执行SHOW VARIABLES LIKE 'have_query_cache';可以查看MySQL查询缓存是否打开,开启查询缓存只需配置my.cnf文件即可,具体如下:

query_cache_type = 1

query_cache_size = 128M

query_cache_limit = 1M

保存好后重启MySQL。

3、选用InnoDB存储引擎,MySQL常用存储引擎是MyISAM和InnoDB,二者区别如下:

MyISAM

查询速度快;

支持表级锁,在上锁期间表上不能进行其他操作;

支持全文检索;

支持数据压缩、自我复制、查询缓存、数据加密;

不支持外键;

不支持事务,所以也就没有COMMIT和ROLLBACK操作;

不支持集群数据库。

InnoDB

支持行级锁;

支持外键,对外键约束强制;

支持事务,可执行COMMIT和ROLLBACK操作;

支持数据压缩、自我复制、查询缓存、数据加密;

可用在集群环境,但并不完全支持。InnoDB表可以转换为NDB存储引擎,这样就能用在集群环境。

MySQL的优化要根据实际业务,并没有什么通用的优化。

其实其他回答都说的很全,

但是我从比较实际的地方说说吧。

第一、开启MySQL的slowLog

slowLog会记录MySQL执行过的慢查询,比较佛系的办法就是让它记录一段时间,

然后查看里面执行的语句。

第二、通过desc的方式来查看慢的原因

比如:SELECT * FROM tbl WHERE Date = CURDATE();

你可以通过执行 desc SELECT * FROM tbl WHERE Date = CURDATE();

这个时候Mysql就会显示执行这句sql的计划,

如果你发现是全表查询,这个时候尝试在Date上增加索引,

然后再跑一次DESC,这个时候你就会发现这句语句已经走了索引。

*通常这个办法能解决90%的慢查询问题。

当上面的问题都无法满足到你的时候,

建议可以参考Mysql官方的参数设定,

然后根据业务特性对MySQL进行特定优化。

答: 本文邀请ryangz分享近来项目的mysql优化经验~

准备知识

了解select的执行顺序有助于理解语句的结果并对其进行优化,执行顺序如下:

详解MySQL数据库优化的八种方式(经典必看)-mysql数据库优化的几种方法

可以通过show status like 'XXX', show global status like 'XXX',show variables like 'XXX' 查看很多重要的数据,eg:Connections 连接数,Slow_queries 慢查询(可以用 show variables like ‘%slow%’来查询是否开启慢查询日志)等等。

详解MySQL数据库优化的八种方式(经典必看)-mysql数据库优化的几种方法

详解MySQL数据库优化的八种方式(经典必看)-mysql数据库优化的几种方法

可以通过 desc sql命令 (同样可是使用explain命令,用法相同)获取这个查询的各种属性,检查这个语句是否达到性能标准。着重看重点要看这几列:

rows(影响行数)

select_type(查询类型,是单表查询还是多表查询)

type、possible_key和key(可能用到的索引,以及真正用到索引等)

详解MySQL数据库优化的八种方式(经典必看)-mysql数据库优化的几种方法

[ possible_key说明可能用到索引competition_id,但是key为null表明最终没有使用索引,进行了全表扫描,rows为全表数量 ]

详解MySQL数据库优化的八种方式(经典必看)-mysql数据库优化的几种方法

[ 本次查询是嵌套查询,两张表的主键都是id,通过desc命令可以看出,player_unique_id的查询时使用的主键索引,影响条数rows为1,但是外部查询虽然id是主键但是没有使用索引,进行了全表查询 ]

一些小技巧和注意事项:

(1)有些时候即便你加了索引,数据库查询的时候也不会使用:

like的%如果只有一个,并且放在开头,则不会使用索引;eg ‘%user’不会使用索引,但是’user%’,’%user%’都会使用索引;

查询的时候and和or 如果想使用索引的话需要前后都加索引,如果只有一个则不会使用索引;

如果查询的时候该列是varchar,但是写的时候没有带引号(写成2018,而不是’2018’),则不会使用索引;

反向条件查询不能使用索引,尽量少用 !=,not in,not exists;

复合索引最左前缀,eg: 复合索引(name`, age):

select * from XXX where age=? and name=? 使用索引

select * from XXX where name=? 使用索引

select from XXX where age=? *不使用索引

(2)尽量避免用嵌套查询,外层的就算是主键也不会使用索引(可以参看准备知识中的例子),可以使用左连接、右连接或者相同的功能的其他写法代替。

(3)如果明确知道只有一条结果返回,limit 1能够提高效率

(4)所有不清楚的操作可以通过?查询,类似linux的man操作,? view 就可以查询视图基本语法

(5)开始数据库慢日志:

vim /etc/my.cnf 添加log_slow_queries=slow.log 以及long_query_time=5(设置慢日志的时长), 然后重启mysql

综上,一般的查询优化步骤如下:

(1)查看慢查询日志,或者通过show status命令查看数据库各项指标是否正常,其中 show status like ‘%handler_read%’ 中 Handler_read_rnd_next如果很高的话,说明需要检查索引了,看看是索引加的不对还是用法不对。

详解MySQL数据库优化的八种方式(经典必看)-mysql数据库优化的几种方法

(2)找到问题的语句,通过desc定位这个语句到底哪里有问题,是语句写法问题、索引问题、还是表结构问题等等。

(3)优化语句,重复第1步,直到符合业务需求

文章版权及转载声明

作者:kris本文地址:https://www.damoyx.com/p/27135.html发布于 2025-01-24 21:11:20
文章转载或复制请以超链接形式并注明出处大漠游侠网

阅读
分享