MySQL 是一个流行的开源关系数据库管理系统,知道如何优化它是必不可少的。缓慢的数据库性能会严重影响您的网站访问速度和用户体验感;一个设计不当的 SQL 查询可能会产生很大的影响。

优化 MySQL 数据库不是一个简单的过程,但它对于维护应用程序性能和服务交付至关重要。在本文中,我们将介绍如何提高 MySQL 数据库性能的一些技巧。

平衡四大主要硬件资源

硬盘

如果您使用的是传统硬盘驱动器 (HDD),您可以升级到固态驱动器 (SSD) 以提高性能。

可以使用类似的工具iotop或SAR从SYSSTAT包来监控您的磁盘输入/输出率。如果磁盘使用率远高于其他资源的使用率,请考虑添加更多硬盘或升级到更快的硬盘。

CPU

CPU通常被认为是衡量系统速度的指标。使用Linux 命令详细了解您的资源是如何使用的。注意 MySQL 进程及其所需的处理器使用百分比。

CPU升级成本比较高,但如果您的 CPU 是一个问题,建议您可以选择租用服务器升级CPU以减少您的成本。

内存

内存表示 MySQL数据库存储服务器中的 RAM 总量。您可以调整内存缓存(稍后会详细介绍)以提高性能。如果您没有足够的内存,或者如果现有的内存没有优化,则最终可能会损害性能而不是提高性能。

与其他问题一样,如果您的服务器内存不足,您可以通过添加更多内存进行升级。如果内存不足,您的服务器将缓存数据存储(如硬盘驱动器)以充当内存。数据库缓存会降低您的性能。

网络

网络对您的网站至关重要,在租用主机时选择合适的宽带也是很重要的。

网络过载会导致延迟、丢包,甚至服务器中断。确保您有足够的网络带宽来容纳正常级别的数据库流量。

MySQL 软件性能调优

避免在 SELECT 子句中使用*

在数据库中最常用的语句是查询语句,避免在使用查询语句时,查询全表,在查询时不要使用“SELECT *”,而是始终在 SELECT 子句中指定表以提高 MySQL 性能。因为不必要的表会导致数据库的额外负载,降低其性能以及整个系统过程。

避免在查询数据的开头使用通配符 (%)

例如 LIKE'%abc'导致全表扫描。

SELECT * FROM TABLE1 WHERE COL1 LIKE '%ABC'

在大多数情况下,这种通配符使用会带来主要的性能限制。

尽量使用内连接,而不是外连接----JOIN, WHERE, UNION, DISTINCT

仅在必要时使用外连接。不必要地使用它不仅会限制数据库性能,还会限制 MySQL 查询优化选项,导致 SQL 语句执行速度变慢。

在适当的地方使用索引查询,例如:

SELECT … WHERE

适当使用 ORDER BY

ORDER BY表达式按指定的列对结果进行排序。它可用于一次按两列排序。这些应该以相同的顺序排序,升序或降序。

如果您尝试以不同的顺序对不同的列进行排序,则会降低性能。您可以将其与索引结合使用以加快排序。

GROUP BY 而不是 SELECT DISTINCT

SELECT DISTINCT试图摆脱重复值的查询时就派上用场了。但是,该语句需要大量的处理能力。

尽可能避免使用SELECT DISTINCT,因为它非常低效且有时令人困惑。

Mysql 查询缓存

衡量性能的最重要方面之一是缓存内容。MySQL 提供数据库查询缓存,它缓存 SELECT 语句文本和检索到的结果。因此,每当您创建重复数据库时,您都会调用 MySQL 查询缓存,它会响应您并显示缓存中的结果,并且不会重复解析调用。通过这种方式,您可以最大化 MySQL 缓存优化过程。

要设置 MySQL 查询缓存,您必须向 MySQL 添加一些设置。首先,您必须使用以下命令检查查询缓存是否可用:

mysql> SHOW VARIABLES LIKE 'have_query_cache' ;

使用命令后会显示结果,YES意味着 MySQL 缓存工作正常。

Variable_name | Value |

| have_query_cache | YES |

现在,您可以设置 MySQL 查询缓存大小和类型。请记住,最小默认大小为 40KB。最大大小可以是 32MB。您可以使用以下命令设置 MySQL query_cache_size:

mysql> SET GLOBAL query_cache_size = 40000;

查询缓存类型可以决定所有连接的行为。您还可以禁用查询缓存,例如:

mysql> SET SESSION query_cache_type = OFF;

同时,您也可以选择启用Redis缓存进行提速

提升网站速度的一个重要方面是优化MySQL 数据库。通过采取上述步骤,您可以确保您的 MySQL 数据库性能得到优化,从而使您能够更高效地完成工作并确保您的业务服务和应用程序保持可用。