MySQL调优 优化需要考虑哪些方面
MySQL调优 优化需要考虑哪些方面
优化目标与方向定位
总体目标:使得响应时间更快,吞吐量更大。 (throughout --- 吞吐量:单位时间内处理事务的数量)
如何找到需要优化的地方
使用反馈。比如做出一些操作后导致效率降低
分析日志。
监控服务器资源。系统,内存,I/O
监控数据库运行状况
可优化维度
设计优化
- 选择适合的DBMS
 - 对表恰当的设计
- 尽量遵循第三范式。减少冗余的同时减少增删改时出错的可能。
 - 适当地"反范式",以空间换时间,提高多表联查的效率。
 - 选择恰当的字段类型。尽量选择数据类型,尽量选择字符长度小的字符类型。
 
 
查询优化
- 对SQL查询进行逻辑优化 --- 就是使用恰当的SQL语句让查询速度更快
- 比如“小表驱动大表”的EXISTS和IN
 - 比如子查询优化,简化查询条件等等
 
 - 对SQL查询进行物理优化  --- 就是通过索引或表链接的方式进行优化,本质上是对Server层优化器和执行器进行“人工辅助”,人为地减轻优化器和执行器的压力。
- 索引
- 为表设计精简且高效的索引 --- 索引不是越多越好,索引需要占据存储空间,过多的索引也会提高优化器选择索引的难度。比如字段内数据重复度高时不建立索引,如性别
 - 若在where中对索引字段进行了表达式计算,会造成该字段索引失效。
 - 设计联合索引时选择恰当的顺序 --- 最左前缀原则
 
 - 表连接
- 单表:全表扫描或局部扫描
 - 两表:合并连接,HASH连接,嵌套循环连接
 - 多表:连接顺序
 
 
 - 索引
 
外置缓存
数据都是存放在数据库(磁盘)中的,在有使用需要的时候就会将磁盘数据调入内存。但当用户量增大时,使用大量数据,频繁读取磁盘会消耗大量资源。因此我们可以事先将常用的数据放入内存中来提高查询效率。
- 键值存储数据库 Redis 和 Memcached 等
 - Redis 支持持久化且支持的数据类型和数据结构比Memcached多。Memcached仅进行内存存储且仅支持键值对存储。
 - 对于查询响应要求高的场景可以考虑上述内存数据库,不过增加的开发人员的工作量。
 
库级优化
一般来说现在常见的关系型数据库单表可以存储亿级的数据量。
当数据量达到亿级以上时可以采用以下方案进行库级优化。
- 读写分离:使用主从数据库代替单一数据库,降低单一数据库时的负载。主库完成写操作,从库完成读操作。
 - 分库分表
- 垂直切分
- 垂直分库:数据表过多时,对表进行划分,将相关联的数据表存放在一个库中
 - 垂直分表:数据表列较多时,对列进行划分并拆分成多个表,将经常一起使用的列存入一张表中
 
 - 水平切分
- 表中数据量达到亿级以上时,在保持相同的表结构的情况下,将表按照某一属性拆分成不同小表。
 
 
 - 垂直切分
 - 分库分表也会增加维护和使用成本,要加以平衡。
 
MySQL调优 优化需要考虑哪些方面的更多相关文章
- MySQL 调优/优化的 100 个建议
		
MySQL 调优/优化的 100 个建议 MySQL是一个强大的开源数据库.随着MySQL上的应用越来越多,MySQL逐渐遇到了瓶颈.这里提供 101 条优化 MySQL 的建议.有些技巧适合特定 ...
 - MySQL 调优/优化的 101 个建议!
		
原文:http://www.monitis.com/blog/101-tips-to-mysql-tuning-and-optimization/ MySQL是一个强大的开源数据库.随着MySQL上的 ...
 - MySQL 调优基础(一) CPU与进程
		
一般而言,MySQL 的调优可以分为两个层面,一个是在MySQL层面上进行的调优,比如SQL改写,索引的添加,MySQL各种参数的配置:另一个层面是从操作系统的层面和硬件的层面来进行调优.操作系统的层 ...
 - MySQL调优系列基础篇
		
前言 有一段时间没有写博客了,整天都在忙,上班,录制课程,恰巧最近一段时间比较清闲,打算弄弄MYSQL数据库. 关于MySQL数据库,这里就不做过多的介绍,开源.免费等特性深受各个互联网行业喜爱,尤其 ...
 - mysql调优 基础
		
MySQL调优可以从几个方面来做: 1. 架构层:做从库,实现读写分离: 2.系统层次:增加内存:给磁盘做raid0或者raid5以增加磁盘的读写速度:可以重新挂载磁盘,并加上noatime参数,这样 ...
 - 数据库MySQL调优实战经验总结<转>
		
数据库MySQL调优实战经验总结 MySQL 数据库的使用是非常的广泛,稳定性和安全性也非常好,经历了无数大小公司的验证.仅能够安装使用是远远不够的,MySQL 在使用中需要进行不断的调整参数或优化设 ...
 - mysql调优最大连接数
		
一.mysql调优 1.1 报错: Mysql: error 1040: Too many connections 1.2 原因: 1.访问量过高,MySQL服务器抗不住,这个时候就要考虑增加从服务器 ...
 - (转)/etc/sysctl.conf 调优 & 优化Linux内核参数
		
/etc/sysctl.conf 调优 & 优化Linux内核参数 from: http://apps.hi.baidu.com/share/detail/15652067 http://ke ...
 - MySQL调优 —— Using temporary
		
DBA发来一个线上慢查询问题. SQL例如以下(为突出重点省略部分内容): select distinct article0_.id, 等字段 from article_table article ...
 
随机推荐
- ASP.NET Core 3.1 WebApi部署到腾讯云CentOS 7+Docker
			
一.准备 首先需要有一台CentOS服务器,安装最新版Docker,配置镜像加速等,安装方法网上很多,下面是一些相关指令: yum install -y yum-utils device-mapper ...
 - QingStor 对象存储架构设计及最佳实践
			
对象存储概念及特性 在介绍 QingStor️对象存储内部的的架构和设计原理之前,我们首先来了解一下对象存储的概念,也就是从外部视角看,对象存储有什么特性,我们应该如何使用. 对象存储本质上是一款存储 ...
 - Windows下搭建Apache网站
			
目录 Apache下载 Apache安装 httpd.conf文件格式说明 启动服务并测试 Apache下载 在Apache官网底部找到APACHE PROJECT LIST里的HTTP Server ...
 - 小菜成长之路,警惕沦为 API 调用侠
			
小菜(化名)在某互联网公司担任运维工程师,负责公司后台业务的运维保障工作.由于自己编程经验不多,平时有不少工作需要开发协助. 听说 Python 很火,能快速开发一些运维脚本,小菜也加入 Python ...
 - 09.Django-信号
			
目录 Django中的信号及其用法 Django中内置的signal 内置信号的使用 自定义信号 Django中的信号及其用法 Django中提供了"信号调度",用于在框架执行操作 ...
 - Keiichi Tsuchiya the Drift King (c++三角函数公式)【几何+三角函数公式】
			
Keiichi Tsuchiya the Drift King 感谢: https://blog.csdn.net/xiao_you_you/article/details/89357815 题目链 ...
 - mysql字符串类型(TEXT 类型)
			
TEXT 类型 TEXT 列保存非二进制字符串,如文章内容.评论等.当保存或查询 TEXT 列的值时,不删除尾部空格. TEXT 类型分为 4 种:TINYTEXT.TEXT.MEDIUMTEXT 和 ...
 - 快捷符号输入小tip(option,alt键的妙用)
			
我们知道特殊符号的输入可以通过上档键(shift)加数字来完成.如!@#$%... -> (shift + 1 2 3 4 5...) 但是少有人知道windows中的alt键,或是macos中 ...
 - 恕我直言你可能真的不会java第4篇:Stream管道流Map操作
			
一.回顾Stream管道流map的基础用法 最简单的需求:将集合中的每一个字符串,全部转换成大写! List<String> alpha = Arrays.asList("Mon ...
 - jenkins构建报错 Error fetching remote repo 'origin'
			
ERROR: Error fetching remote repo 'origin' Finished: FAILURE // 原因如下 原因一:可能是配置的git分支的权限问题,检查一下配置里面的源 ...