不同方案效率对比

  • MySQL各字段默认长度(一字节为8位)

整型:
TINYINT 1 字节
SMALLINT 2 个字节
MEDIUMINT 3 个字节
INT 4 个字节
INTEGER 4 个字节
BIGINT 8 个字节 浮点型:
FLOAT(X) 4 如果 X < = 24 或 8 如果 25 < = X < = 53
FLOAT 4 个字节
DOUBLE 8 个字节
DOUBLE PRECISION 8 个字节
REAL 8 个字节 DECIMAL(M,D) M字节(D+2 , 如果M < D)
NUMERIC(M,D) M字节(D+2 , 如果M < D) 日期和时间型:
DATE 3 个字节
DATETIME 8 个字节
TIMESTAMP 4 个字节
TIME 3 个字节
YEAR 1 字节 串类型:
CHAR(M) M字节,1 <= M <= 255
VARCHAR(M) L+1 字节, 在此L <= M和1 <= M <= 255
TINYBLOB, TINYTEXT L+1 字节, 在此L< 2 ^ 8
BLOB, TEXT L+2 字节, 在此L< 2 ^ 16
MEDIUMBLOB, MEDIUMTEXT L+3 字节, 在此L< 2 ^ 24
LONGBLOB, LONGTEXT L+4 字节, 在此L< 2 ^ 32
ENUM('value1','value2',...) 1 或 2 个字节, 取决于枚举值的数目(***值65535)
SET('value1','value2',...) 1,2,3,4或8个字节, 取决于集合成员的数量(最多64个成员)
1、测试数据导入
 在数据库中新建一张包含300万条数据的表
2、查询语句指定列和不指定列
select * from table;
select id from table;
在数据量巨大的情况下,查询的时候最好指定列,效率高
3、用不同引擎执行时间
select * from table;
MyISAM效率高于InnoDB

MySQL优化

一、MySQL优化简介

  1. MySQL官方的优化(Optimization)解决方案

    https://dev.mysql.com/doc/refman/5.7/en/optimize.html
  2. 优化概述 数据库性能取决于数据库级别的几个因素,例如表,查询和配置设置。这些软件结构导致在硬件级别执行CPU和I / O操作,您必须将这些操作最小化并使其尽可能高效。在研究数据库性能时,首先要学习软件方面的高级规则和准则,并使用时钟时间来衡量性能。成为专家后,您将了解有关内部情况的更多信息,并开始测量诸如CPU周期和I / O操作之类的东西。 典型的用户旨在从其现有的软件和硬件配置中获得最佳的数据库性能。高级用户寻找机会改进MySQL软件本身,或开发自己的存储引擎和硬件设备以扩展MySQL生态系统。 优化MySQL主要从两个方向:数据库级别和硬件级别,同时需考虑平衡便携性和性能。
  3. 硬件级别优化 随着数据库变得越来越繁忙,任何数据库应用程序最终都会达到硬件极限。DBA必须评估是否有可能调整应用程序或重新配置服务器以避免这些 瓶颈,或者是否需要更多的硬件资源。系统瓶颈通常来自以下来源:
    • 磁盘搜索。磁盘查找数据需要花费时间。对于现代磁盘,此操作的平均时间通常小于10毫秒,因此理论上我们可以执行约100秒钟的搜索。这段时间随着新磁盘的使用而缓慢改善,并且很难为单个表进行优化。优化寻道时间的方法是将数据分发到多个磁盘上。更换好的硬盘(如:机械->固态)
    • 磁盘读写。当磁盘位于正确的位置时,我们需要读取或写入数据。使用现代磁盘,一个磁盘至少可提供10–20MB / s的吞吐量。与查找相比,优化起来更容易,因为您可以从多个磁盘并行读取。更换好的硬盘(如:机械->固态)
    • CPU周期。当数据位于主存储器中时,我们必须对其进行处理以获得结果。与内存量相比,拥有较大的表是最常见的限制因素。但是对于小桌子,速度通常不是问题。选择好的CPU
    • 内存带宽。当CPU需要的数据超出CPU缓存的容量时,主内存带宽将成为瓶颈。对于大多数系统来说,这是一个不常见的瓶颈,但是要意识到这一点。CPU缓存
  4. 数据库级别优化:使数据库应用程序快速运行的最重要因素是其基本设计:
    • 表格的结构是否正确(Are the tables structured properly?):特别是,这些列是否具有正确的数据类型,并且每个表都具有适合于该工作类型的列吗?例如,执行频繁更新的应用程序通常具有许多表而具有很少的列,而分析大量数据的应用程序通常具有很少的表而具有很多列。
    • 是否安装了正确的 索引以提高查询效率(Are the right indexes in place to make queries efficient?):优化索引是我们使用成本最低,效果最好的方式
    • 您是否为每个表使用了适当的存储引擎,并利用了所使用的每个存储引擎的优势和功能?特别是,对于InnoDB 诸如MyISAM 性能或可伸缩性之类的事务性存储引擎或诸如非 事务性存储引擎的选择 可能非常重要。 注意InnoDB是新表的默认存储引擎。实际上,高级 InnoDB性能功能意味着 InnoDB表通常要比简单MyISAM表好,尤其是对于繁忙的数据库。
    • 每个表都使用适当的行格式吗?该选择还取决于表使用的存储引擎。特别是,压缩表使用较少的磁盘空间,因此需要较少的磁盘I / O来读取和写入数据。压缩适用于带InnoDB表的所有工作负载 以及只读 MyISAM表。
    • 应用程序是否使用适当的 锁定策略?例如,通过在可能的情况下允许共享访问,以便数据库操作可以同时运行,并在适当的时候请求独占访问,以使关键操作获得最高优先级。同样,存储引擎的选择很重要。该InnoDB存储引擎处理大部分锁定问题,而不需要您的参与,允许在数据库更好的并发,减少试验和调整的金额,让您的代码。
    • 用于缓存的 所有内存区域大小是否正确?也就是说,足够大以容纳经常访问的数据,但又不能太大以至于它们会使物理内存过载并导致分页。要配置的主要内存区域是InnoDB缓冲池,MyISAM键高速缓存和MySQL查询高速缓存。

二、优化哲学

注意:优化有风险,涉足需谨慎!

1. 优化可能带来的问题
    • 1.1 优化不总是对一个单纯的环境进行,还很可能是一个复杂的自己投产的系统
    • 1.2 优化手段本来就有很大的风险,只不过IMEI能力意识到和预见到!
    • 1.3 任何技术可以解决一个问题,但必然存在带来一个问题的风险!
    • 1.4 对于优化来说解决问题而带来的问题,控制在可接受的范围内才是有成果。
    • 结论:保持现状或出现更差的情况都是失败!
2. 优化的需求
    • 2.1 稳定性和业务可持续行,通常比性能更重要!
    • 2.2 优化不可避免涉及到变更,变更就有风险!
    • 2.3 优化使性能编号,维持和变差是等概率事件!
    • 2.4 切记优化应该是各部门协同,共同参与的工作,任何单一部门都不能对数据库进行优化!
    • 结论:所以优化工作是有业务需要驱动的!!!

三、优化由谁参与

​ 在进行数据库优化时,应有数据库管理员、业务部门代表、应用程序架构师、应用程序设计人员、应用程序开发人员、硬件及系统管理员、存储管理员等,业务相关人员共同参与。

四、优化的顺序

​      优化选择

  • 优化成本:硬件 > 系统配置 > 数据库表结构 > SQL及索引
  • 优化效果:硬件 < 系统配置 < 数据库表结构 < SQL及索引

五、常见的优化工具

  • 检查问题常用工具
 mysqladmin        # mysql客户端,可进行管理操作
mysqlshow # 功能请打的查看shell命令
show [SESSION | GLOBAL] variables # 插卡数据库参数信息
SHOW [SESSION | GLOBAL] STATUS # 查看数据库的状态信息
information_schema # 获取源数据的方法
SHOW ENGINE INNODB STATUS Innodb # 引擎的所有状态
SHW PROCESSLIST # 查看当前所有连接session状态
explain # 获取查看语句的执行计划
show index # 查看表的索引信息
slow-log # 记录慢查询语句
mysqldumpslow # 分析slowlog文件
  • 不常用但好用的工具
 zabbix            # 监控主机、系统、数据库(部署zabbix监控平台)
pt-query-digest # 分析慢日志
mysqlslap # 分析慢日志
sysbench # 压力测试工具
mysql profiling # 统计数据库整体状态工具
Performance Schema mysql # 性能状态统计的数据
workbench # 管理、备份、监控、分析、优化工具(比较满资源)

  



SQL高级优化(一)之MySQL优化的更多相关文章

  1. 【Mysql 优化 6】mysql优化的内容和思路

    根据最近做mysql优化,以及参照的官方文档的一些知识点,总结一下,如何下手去优化mysql 数据库.PS:更多可能是我个人的笔记总结记录,仅供参考 一.优化的内容 可以优化的内容,从范围的大小,可以 ...

  2. MySQL优化---DBA对MySQL优化的一些总结

      非原创, 来自梦嘉朋友, 非常好的总结, 一起学习. ------------------------------------------------- 1. 要确保有足够的内存数据库能够高效的运 ...

  3. Mysql优化系列(2)--通用化操作梳理

    前面有两篇文章详细介绍了mysql优化举措:Mysql优化系列(0)--总结性梳理Mysql优化系列(1)--Innodb引擎下mysql自身配置优化 下面分类罗列下Mysql性能优化的一些技巧,熟练 ...

  4. mysql优化方案总结

    u       Mysql数据库的优化技术 对mysql优化时一个综合性的技术,主要包括 a: 表的设计合理化(符合3NF) b: 添加适当索引(index) [四种: 普通索引.主键索引.唯一索引u ...

  5. MySQL优化二(连接优化和缓存优化)

    body { font-family: Helvetica, arial, sans-serif; font-size: 14px; line-height: 1.6; padding-top: 10 ...

  6. MYSQL学习笔记——数据库范式及MYSQL优化整体思路

    一.数据库范式                                                                               为了建立冗余较小.结构合理的 ...

  7. MySQL优化、锁

    1.  MySQL优化-查看执行记录 MySQL 提供了一个 EXPLAIN 命令, 它可以对 SELECT 语句进行分析, 并输出 SELECT 执行的详细信息, 以供开发人员针对性优化. 使用ex ...

  8. MySql优化方案

    mysql优化方案总结 u       Mysql数据库的优化技术 对mysql优化时一个综合性的技术,主要包括 a: 表的设计合理化(符合3NF) b: 添加适当索引(index) [四种: 普通索 ...

  9. mysql系列十一、mysql优化笔记:表设计、sql优化、配置优化

    可以从这些方面进行优化: 数据库(表)设计合理 SQL语句优化 数据库配置优化 系统层.硬件层优化 数据库设计 关系数据库三范式 1NF:字段不可分; 2NF:有主键,非主键字段依赖主键; 3NF:非 ...

随机推荐

  1. Jsp/servlet分页五要素

    分页5要素: * 1)pageIndex 当前页 * 2)startIndex 从第几条数据开始 * 3)countAll 总条目数 * 4)pageSize 每页大小 * 5)pageCount 总 ...

  2. Java中的对于多态的理解

    一.什么是多态 面向对象的三大特性:封装.继承.多态 多态的定义:指允许不同类的对象对同一消息做出响应.即同一消息可以根据发送对象的不同而采用多种不同的行为方式.(发送消息就是函数调用) 实现多态的技 ...

  3. shell脚本 阿里云基线检查一键配置

    一.简介 源码地址 日期:2017/9/1 介绍:安全加固脚本,会符合阿里云基线检查.有幂等性,可重复执行 效果图: 二.使用 适用:centos6/7 语言:中文 注意:脚本是符合阿里云基线检查的配 ...

  4. 铁人三项(第五赛区)_2018_rop

    拿到程序依旧老样子checksec和file一下 可以看到是32位的程序开启了nx保护,将程序放入ida进行查看 shift+f12 看到没有system和binsh等字样,考虑用泄露libc来做这道 ...

  5. .NET Core工程应用系列(2) 实现可配置Attribute的Json序列化方案

    背景 在这篇文章中,我们实现了基于自定义Attribute的审计日志数据对象属性过滤,但是在实际项目的应用中遇到了一点麻烦.需要进行审计的对象属性中会包含其他类对象,而我们之前的实现是没办法处理这种类 ...

  6. UVA12412 师兄帮帮忙 A Typical Homework (a.k.a Shi Xiong Bang Bang Mang) 题解

    Content 自己去看题面去. Solution 算不上很繁琐的一道大模拟. 首先,既然是输出 \(0\) 才退出,那么在此之前程序应当会执行菜单 \(\Rightarrow\) 子操作 \(\Ri ...

  7. Docker从入门到精通(八)——Docker Compose

    恭喜大家,学到这里,对于 docker 的基础玩法大家应该都会了,下面会介绍 docker的一些编排工具. 1.为什么需要 Docker Compose? 官网镇楼:https://www.runoo ...

  8. 大学MOOC课程视频下载、流文件合并、批量重命名、b站视频下载及学习课程视频推荐

    计算机行业技术更新快,编程语言种类多,在当今大数据和人工智能的时代,为了能在相关领域有所成就,就必须掌握好python.R等语言,较好的数学基础和深入的行业背景知识.计算机从业人员务必践行" ...

  9. epoll linux和协程gevent的区别

    epoll linux  底层是libevent.so模块实现的 gevent也是IO多路复用,底层是libevent.so模块实现的是更上层的封装 Twsited异步网络框架.代码量非常大.在开源p ...

  10. Windows c(++)获取磁盘剩余容量

    头文件 #include <windows.h> #include <wtypes.h> 函数 GetDiskFreeSpaceExA 获取剩余可用空间 /// 得到盘符, 例 ...