本文作者:kris

MySQL 配置优化(多个参数)-mysql优化配置文件

kris 2025-01-18 17:11:33 3
MySQL 配置优化(多个参数)-mysql优化配置文件摘要: mysql频繁写入有什么优化方法没?1.优化数据结构,每张数据表字段4-5个,加上索引。还可以将不同的种类的数据存入不同的数据库。减少单个数据库的压力。2.写入数据只是存的问题,问...

mysql频繁写入有什么优化方法没?

1.优化数据结构,每张数据表字段4-5个,加上索引。还可以将不同的种类的数据存入不同的数据库。减少单个数据库的压力。

2.写入数据只是存的问题,问题在于读取数据会变慢。建议使用缓存memcache,redis在向你招收哦。将用户数据存入内存,再次读取避免从数据库查找。

3.分布式,搞集群,扩大配置。

一条新闻的相关信息,来源,作者,正文,这些基本不变咯,除了正文可能文字比较多,其他的你可以存进缓存,正文的话,你这里可以把前面200字作为正文缩略,存进缓存。

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存储引擎,这样就能用在集群环境。

答: 本文邀请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步,直到符合业务需求

对数据库优化我认为可以分一下步骤进行:

1、表结构优化;

根据实际项目的业务逻辑,对表结构进行合理拆分,和合并;减少数据冗余;适度的反范式。

对表字段选择适当的字段类型;

2、sql语句优化;

针对一下特定的SQL查询进行优化,可以开启mysql慢日志,锁定慢查询语句然后进行查询优化;具体的优化方案还得根据实际业务来定;比如select * 替换 具体的查询字段;OR改写为IN()查询;查分join查询等等;

3、合理构建索引,优化索引,避免滥用;

建立索引被多少人认为是提升数据库性能的审计,于是甚至有人说把where后面所有的查询字段都加上索引;需要搞清楚的是,索引的确可以大大提高查询效率,但是索引对应添加和更新数据,增加了大量的I/O,而且对表的存在空间增大;不合理的索引反而成了累赘。

4、构建集群;

搭建数据库集群,配合数据库中间件实现读写分离负载均衡;

5、存储业务拆分;

对于一些业务和数据通过其他方式存在进行优化,比如检索字段可以用ES或者Solr进行查分。

文章版权及转载声明

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

阅读
分享