MYSQL优化概述
一、在数据库级别进行优化
使数据库应用程序快速运行的最重要因素是其基本设计,在数据库层面,我们往往可以从以下几个方面下手:
1.表结构合理吗?
每个列是否具有正确的数据类型
每个表是否具有适合工作类型的列
例如,执行频繁更新的应用程序通常具有许多具有少量列的表,而分析大量数据的应用程序通常具有很少列的表。
2.是否有适当的索引来提高查询效率?
3.是否为每个表使用适当的存储引擎?(例如事务性存储引擎InnoDB和非事务性存储引擎MyISAM的选择对于性能和可伸缩性来说非常重要。)
注意:
InnoDB是新表的默认存储引擎。
实际上,高级 InnoDB性能特征意味着 InnoDB表通常优于更简单的MyISAM表,尤其是对于繁忙的数据库。
4.每个表是否使用适当的行格式?
5.是否使用适当的锁定策略?
6.是否正确使用了用于缓存的所有内存区域?
足够大以容纳频繁访问的数据,但不能太大以至于它们会超载物理内存并导致分页。要配置的主要内存区域是InnoDB缓冲池和MyISAM密钥缓存。
二、在硬件级别进行优化
随着数据库变得越来越繁忙,任何数据库应用程序最终都会达到硬件限制。DBA必须评估是否可以调整应用程序或重新配置服务器以避免这些 瓶颈,或者是否需要更多硬件资源。系统瓶颈通常来自这些来源:
1.磁盘寻找
磁盘需要一段时间才能找到一块数据。对于现代磁盘,平均时间通常低于10毫秒,因此我们理论上可以做到大约100次寻找。这个时间用新磁盘慢慢改善,并且很难针对单个表进行优化。优化寻道时间的方法是将数据分配到多个磁盘上。
2.磁盘读写
当磁盘位于正确位置时,我们需要读取或写入数据。使用现代磁盘,一个磁盘可提供至少10-20MB / s的吞吐量。这比搜索更容易优化,因为可以从多个磁盘并行读取。
3.CPU周期
当数据在主存储器中时,我们必须处理它以获得我们的结果。与内存量相比具有大表是最常见的限制因素。但是对于小表,速度通常不是问题。
4.内存带宽
当CPU需要的数据量超过CPU缓存容量时,主内存带宽成为瓶颈。对于大多数系统来说,这是一个不常见的瓶颈,但依然需要注意
三、平衡可移植性和性能
要在可移植的MySQL程序中使用面向性能的SQL扩展,您可以在/*! */注释分隔符的语句中包含特定于MySQL的关键字。其他SQL服务器忽略注释的关键字