【SQL优化】MySQL优化(概述)

来源:互联网 发布:智能电视网络dns设置 编辑:程序博客网 时间:2024/06/05 21:41
一、优化概述

       数据库性能取决于数据库级的几个因素,如表,查询和配置设置。这些软件结构导致CPU和I / O操作在硬件级别,您必须最小化并尽可能高效。在处理数据库性能时,首先要了解软件方面的高级规则和准则,并使用挂钟时间来衡量性能。当您成为专家时,您将进一步了解内部发生的事情,并开始测量CPU周期和I / O操作。

       典型的用户希望通过现有的软件和硬件配置获得最佳的数据库性能。高级用户寻找改善MySQL软件本身的机会,或开发自己的存储引擎和硬件设备来扩展MySQL生态系统。

        (1)在数据库级优化

        (2)在硬件级别优化

        (3)平衡便携性和性能

        

       1.在数据库级优化

       制作数据库应用程序的最重要因素是其基本设计:

       表格是否正确结构?特别是,这些列是否具有正确的数据类型,并且每个表都有适合工作类型的列?例如,执行频繁更新的应用程序通常有许多具有很少列的表,而分析大量数据的应用程序通常具有很少列的表。
       是否有正确的 索引来提高查询效率?
       您是否为每个表使用适当的存储引擎,并利用您使用的每个存储引擎的优势和功能?特别地,诸如InnoDB 或非 事务性存储引擎的选择 MyISAM 对于性能和可扩展性可能是非常重要的。

      注意
      InnoDB是新表的默认存储引擎。在实践中,高级 InnoDB性能特征意味着 InnoDB表经常优于更简单的MyISAM表,特别是对于繁忙的数据库。

       每个表使用适当的行格式?这个选择还取决于用于表的存储引擎。特别地,压缩表使用更少的磁盘空间,因此需要较少的磁盘I / O来读取和写入数据。压缩可用于具有InnoDB表格和只读表的 各种工作负载 MyISAM。
       应用程序是否使用适当的 锁定策略?例如,通过允许共享访问,以便数据库操作可以同时运行,并在适当时请求独占访问,以使关键操作成为最高优先级。再次,存储引擎的选择是重要的。该InnoDB存储引擎处理大部分锁定的问题,而不需要您的参与,允许在数据库更好的并发,减少试验和调整的金额,让您的代码。
       用于缓存的 所有内存区域是否正确?也就是说,足够大以容纳经常访问的数据,但不能太大,从而使物理内存过载并导致寻呼。要配置的主要内存区域是InnoDB缓冲池和MyISAM密钥缓存。


       2.在硬件级别优化
       随着数据库变得越来越忙,任何数据库应用程序最终都会遇到硬件限制。DBA必须评估是否可以调整应用程序或重新配置服务器以避免这些 瓶颈,或者是否需要更多的硬件资源。系统瓶颈通常源于这些来源:
       磁盘寻找。磁盘需要时间才能找到一个数据。使用现代磁盘,平均时间通常低于10ms,所以我们可以在理论上做约100次寻求一秒钟。这个时候用新的磁盘缓慢地改进,并且很难优化一个表。优化搜索时间的方法是将数据分发到多个磁盘上。
       磁盘读写。当磁盘处于正确位置时,我们需要读取或写入数据。使用现代磁盘,一个磁盘提供至少10-20MB / s的吞吐量。这比寻求更容易优化,因为您可以从多个磁盘并行读取。
       CPU周期。当数据在主内存中时,我们必须处理它才能得到我们的结果。拥有大量表与内存量相比是最常见的限制因素。但是用小桌子,速度通常不是问题。
       内存带宽。当CPU需要的数据超过CPU高速缓存时,主内存带宽将成为瓶颈。对于大多数系统来说,这是一个罕见的瓶颈,但需要注意的是。


       3.平衡便携性和性能

       要在便携式MySQL程序中使用面向性能的SQL扩展,您可以在/*! */注释分隔符中的语句中包装特定于MySQL的关键字。其他SQL服务器忽略已注释的关键字。有关编写注释的信息,请参见第9.6节“注释语法”。


        Addition:

        最近在对MySql数据库进行学习,除了一些基本的知识点之外,就是对于数据库的优化,实习过程中涉及到ORM框架的使用,对MySql很感兴趣,发现了MySQL官网的这个系列文章,翻译过来分享给同学们,互相学习。