龙空技术网

MySql数据库保姆级优化方案

架构师聊技术 2414

前言:

现在你们对“mysql优化百度云”都比较关怀,咱们都想要剖析一些“mysql优化百度云”的相关文章。那么小编在网上网罗了一些关于“mysql优化百度云””的相关内容,希望同学们能喜欢,大家一起来了解一下吧!

项目的性能,一般首先会从数据库开始优化,因为系统的数据目前来说还是主要存储在数据库中,该手册也是给真实客户项目Mysql数据库优化方案手册,其它数据库也可以做参考,原理都相差不会大,应该是比较详情的操作步骤了,如果有问题可以留言交流,或者给我发私信也可以。

如果条友喜欢,还请给个关注

序号

时间

版本

作者

1

2021/11/25

1.0

刘志虎

优化角度数据库设计操作语句基础设施数据库架构
一、数据库设计优化根据业务需求选择正确的存储引擎,如果对事务性要求高就用InnoDB(默认),读多写少尽量使用MyISAM。设置合理的字段类型及字段长度,比如说你这个字段就20多个字段你设置成VARCHAR(255)就是对磁盘空间的浪费。默认值尽可能的使用 NOT NULL,可以通过设置默认值避免NULL值。尽量少的使用VARCHAR,TEXT,BLOB这三个字段。添加适当索引(index) [普通索引、主键索引、唯一索引unique、全文索引]。不要滥用索引,大表索引,小表不索引。表的设计合理化(符合3NF)。二、SQL语句优化优化利器 -- EXPLAIN
EXPLAINSELECT COUNT(*) FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'iacl_cmp' UNION SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'iacl_cmp' UNION SELECT COUNT(*) FROM information_schema.ROUTINES WHERE ROUTINE_SCHEMA = 'iacl_cmp';

运行结果

主要关注4个指标:

type:优化目标至少达到range级别,要求是ref级别,如果可以const最好。type 性能从高到低

system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL
key:是查询使用到的索引,如果此列为空,要么未建立索引,要么索引失效。rows:是这条SQL语句扫描的行数,越少越好。extra:此列为扩展列,如果出现临时表、文件排序则需要优化。where、= 条件避免类型转换入参类型在传入前转换成跟字段类型一致内关联避免也要避免类型不一致做过滤避免使用 select *like引起索引失效,尽量满足最左匹配原则,建议这样写:where display_name like '开始%';不要在where条件中带有函数计算、类型转换关于in和exist,如果查询的俩个表大小一致则性能差别可忽略,如果子查询表大用exist,否则使用in预知查询一条数据要加上limit 1,以便查到数据终止扫描关联查询尽量不要超过 3 个表关联数据字段更新频繁、重复度高不适合建索引explain中的type至少要达到range,建议为ref尽量用join代替子查询尽量用union all代替union数据优化常用命令查看Mysql服务器的链接show full processlist;查询慢查询次数show status like 'slow_queries';查看慢查询设置的时间 ,默认10sshow variables like 'long_query_time';设置慢查询时间、set long_query_time = 1;查看建表语句show create table wf_node;查看表的字段desc wf_node;查看表索引show indexes from wf_node;创建索引主键索引alter table wf_node add primary key(id);唯一索引alter table wf_node add UNIQUE (gmt_create);普通索引alter table wf_node add index idx_display_name (display_name);复合索引ALTER TABLE wf_node ADD INDEX idx_display_name_gmt_create (display_name, gmt_create);删除索引drop index idx_display_name on wf_node;重建索引OPTIMIZE TABLE wf_node;三、基础设施优化硬件优化CPU:配置多核心和频率高的cpu,多核心可以执行多个线程内存:配置大内存,提高内存,即可提高缓存区容量,因此能减少磁盘I/O时间,从而提高响应速度.磁盘:配置高速磁盘或合理分布磁盘:高速磁盘提高I/O,分布磁盘能提高并行操作的能力.数据库本身参数配置key_buffer_size:索引缓冲区大小table_open_cache:指定表高速缓存的大小query_cache_size和query_cache_type:前者是查询缓冲区大小,后者是前面参数的开关,0表示不使用缓冲区,1表示使用缓冲区,但可以在查询中使用SQL_NO_CACHE表示不要使用缓冲区,2表示在查询中明确指出使用缓冲区才用缓冲区,即SQL_CACHEsort_buffer_size:排序缓冲区四、数据库架构优化增加缓存给数据库增加缓存系统,把热数据缓存到内存中,如果缓存中有请求的数据就不再去请求MySQL,减少数据库负载。主从复制与读写分离在生产环境中,业务系统通常读多写少,可部署一主多从架构,主数据库负责写操作,并做双机热备,多台从数据库做负载均衡,负责读操作分表分表分为垂直拆分和水平拆分:垂直拆分:把原来的一个很多字段的表拆分多个表,解决表的宽度问题。你可以把不常用的字段单独放到一个表中,也可以把大字段独立放一个表中,或者把关联密切的字段放一个表中。水平拆分:把原来一个表拆分成多个表,每个表的结构都一样,解决单表数据量大的问题。分区分区就是把一张表的数据根据表结构中的字段(如range、list、hash等)分成多个区块,这些区块可以在一个磁盘上,也可以在不同的磁盘上,分区后,表面上还是一张表,但数据散列在多个位置,这样一来,多块硬盘同时处理不同的请求,从而提高磁盘I/O读写性能。五、PDF文档下载有条友的同行在留言或者在私信中说要pdf文档,但头条没有发现哪里可以发附件,就发到百度网盘了,下面是联系地址,有需要的下载就行了,大家记得关注我哦

链接:

提取码:a8jb

标签: #mysql优化百度云