MySQL调优 优化需要考虑哪些方面

 

优化目标与方向定位

  • 总体目标:使得响应时间更快,吞吐量更大。 (throughout --- 吞吐量:单位时间内处理事务的数量)

  • 如何找到需要优化的地方

    • 使用反馈。比如做出一些操作后导致效率降低

    • 分析日志。

    • 监控服务器资源。系统,内存,I/O

    • 监控数据库运行状况

 

可优化维度

设计优化

  • 选择适合的DBMS
  • 对表恰当的设计
    • 尽量遵循第三范式。减少冗余的同时减少增删改时出错的可能。
    • 适当地"反范式",以空间换时间,提高多表联查的效率。
    • 选择恰当的字段类型。尽量选择数据类型,尽量选择字符长度小的字符类型。

查询优化

  • 对SQL查询进行逻辑优化 --- 就是使用恰当的SQL语句让查询速度更快

    • 比如“小表驱动大表”的EXISTS和IN
    • 比如子查询优化,简化查询条件等等
  • 对SQL查询进行物理优化 --- 就是通过索引或表链接的方式进行优化,本质上是对Server层优化器和执行器进行“人工辅助”,人为地减轻优化器和执行器的压力。
    • 索引

      • 为表设计精简且高效的索引 --- 索引不是越多越好,索引需要占据存储空间,过多的索引也会提高优化器选择索引的难度。比如字段内数据重复度高时不建立索引,如性别
      • 若在where中对索引字段进行了表达式计算,会造成该字段索引失效。
      • 设计联合索引时选择恰当的顺序 --- 最左前缀原则
    • 表连接
      • 单表:全表扫描或局部扫描
      • 两表:合并连接,HASH连接,嵌套循环连接
      • 多表:连接顺序

 

外置缓存

数据都是存放在数据库(磁盘)中的,在有使用需要的时候就会将磁盘数据调入内存。但当用户量增大时,使用大量数据,频繁读取磁盘会消耗大量资源。因此我们可以事先将常用的数据放入内存中来提高查询效率。

  • 键值存储数据库 Redis 和 Memcached 等
  • Redis 支持持久化且支持的数据类型和数据结构比Memcached多。Memcached仅进行内存存储且仅支持键值对存储。
  • 对于查询响应要求高的场景可以考虑上述内存数据库,不过增加的开发人员的工作量。

 

库级优化

一般来说现在常见的关系型数据库单表可以存储亿级的数据量。

当数据量达到亿级以上时可以采用以下方案进行库级优化。

  • 读写分离:使用主从数据库代替单一数据库,降低单一数据库时的负载。主库完成写操作,从库完成读操作。
  • 分库分表
    • 垂直切分

      • 垂直分库:数据表过多时,对表进行划分,将相关联的数据表存放在一个库中
      • 垂直分表:数据表列较多时,对列进行划分并拆分成多个表,将经常一起使用的列存入一张表中
    • 水平切分
      • 表中数据量达到亿级以上时,在保持相同的表结构的情况下,将表按照某一属性拆分成不同小表。
  • 分库分表也会增加维护和使用成本,要加以平衡。

 

MySQL调优 优化需要考虑哪些方面的更多相关文章

  1. MySQL 调优/优化的 100 个建议

    MySQL 调优/优化的 100 个建议   MySQL是一个强大的开源数据库.随着MySQL上的应用越来越多,MySQL逐渐遇到了瓶颈.这里提供 101 条优化 MySQL 的建议.有些技巧适合特定 ...

  2. MySQL 调优/优化的 101 个建议!

    原文:http://www.monitis.com/blog/101-tips-to-mysql-tuning-and-optimization/ MySQL是一个强大的开源数据库.随着MySQL上的 ...

  3. MySQL 调优基础(一) CPU与进程

    一般而言,MySQL 的调优可以分为两个层面,一个是在MySQL层面上进行的调优,比如SQL改写,索引的添加,MySQL各种参数的配置:另一个层面是从操作系统的层面和硬件的层面来进行调优.操作系统的层 ...

  4. MySQL调优系列基础篇

    前言 有一段时间没有写博客了,整天都在忙,上班,录制课程,恰巧最近一段时间比较清闲,打算弄弄MYSQL数据库. 关于MySQL数据库,这里就不做过多的介绍,开源.免费等特性深受各个互联网行业喜爱,尤其 ...

  5. mysql调优 基础

    MySQL调优可以从几个方面来做: 1. 架构层:做从库,实现读写分离: 2.系统层次:增加内存:给磁盘做raid0或者raid5以增加磁盘的读写速度:可以重新挂载磁盘,并加上noatime参数,这样 ...

  6. 数据库MySQL调优实战经验总结<转>

    数据库MySQL调优实战经验总结 MySQL 数据库的使用是非常的广泛,稳定性和安全性也非常好,经历了无数大小公司的验证.仅能够安装使用是远远不够的,MySQL 在使用中需要进行不断的调整参数或优化设 ...

  7. mysql调优最大连接数

    一.mysql调优 1.1 报错: Mysql: error 1040: Too many connections 1.2 原因: 1.访问量过高,MySQL服务器抗不住,这个时候就要考虑增加从服务器 ...

  8. (转)/etc/sysctl.conf 调优 & 优化Linux内核参数

    /etc/sysctl.conf 调优 & 优化Linux内核参数 from: http://apps.hi.baidu.com/share/detail/15652067 http://ke ...

  9. MySQL调优 —— Using temporary

      DBA发来一个线上慢查询问题. SQL例如以下(为突出重点省略部分内容): select distinct article0_.id, 等字段 from article_table article ...

随机推荐

  1. Java实现第九届蓝桥杯递增三元组

    题目6.递增三元组 题目描述 给定三个整数数组 A = [A1, A2, - AN], B = [B1, B2, - BN], C = [C1, C2, - CN], 请你统计有多少个三元组(i, j ...

  2. 【Jquery】判断宽度跳转

    $(window).resize(function(){ var wWidth = screen.width; if( wWidth < 788 ){ window.location.href= ...

  3. css背景图片加载失败,页面部分图标无法显示

    1.问题表现:首屏缺失部分图标.点击按钮切换为激活状态时,部分按钮的激活态图标无法显示. 2.问题原因:网络极差,断断续续,点击时添加class:active变为激活态, active.png这张图片 ...

  4. FTP服务器上传工具,FTP服务器上传工具下载!

    IIS7服务器管理工具能够作为FTP的客户端,进行FTP的命令操作,可在客户端,下载,安装FTP软件! 同时,它也可以作为VNC的客户端,进行VNC的命令操作!它能够批量连接Windows和Linux ...

  5. WebService之Spring+CXF整合示例

    一.Spring+CXF整合示例 WebService是一种跨编程语言.跨操作系统平台的远程调用技术,它是指一个应用程序向外界暴露一个能通过Web调用的API接口,我们把调用这个WebService的 ...

  6. HDU-3033 I love sneakers! 题解

    题目大意 有 n 个物品,分成了 k 组,每个物品有体积和价值,把 n 个物品放到容量为 V 的背包中,保证每组至少放一件,求能获得的最大价值,如果不能实现,输出"Impossible&qu ...

  7. C# ASP.NET递归循环生成嵌套json结构树

    1. 建立用来保存树结构数据的目标对象 public class TreeObject { public string name { get; set; } public string value { ...

  8. Uint47 calculator【map数组+快速积+各种取余公式】

    Uint47 calculator 题目链接(点击) In the distant space, there is a technologically advanced planet. One day ...

  9. python获取本地时间戳

    import time print(time.time())#获当前时间的时间戳 print(time.localtime())#获取本地时间 print(time.strftime('%Y-%m-% ...

  10. Java 多线程基础(九)join() 方法

    Java 多线程基础(九)join 方法 一.join() 方法介绍 join() 定义 Thread 类中的,作用是:把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程.如:线 ...