在现代 Web 应用程序漂亮的用户界面(UI)后面,有异步服务从数据库中提取数据,并具有多种目标,包括加载下拉列表、填充数据表、同步组件等。后端进程的任何滞后将被用户视为缓慢甚至无响应的应用程序。这反过来会降低用户体验,并对你的应用程序有负面看法。因此,必须将查询响应时间减少到最低可行值。在许多情况下,这意味着要在数百分之一秒(而不是秒)内测量查询运转时间。
不用说,达到亚秒级的响应时间需要做的事情不仅仅是在可搜索字段上定义索引。在今天的文章中,我们将介绍一些在 MySQL 8中将查询发挥最大性能的技术。
EXPLAIN 命令
要知道查询需要什么才能更好地执行的一种好方法是使用 EXPLAIN 命令。它返回指定语句的查询优化器执行计划的格式化说明。你可以使用此信息来分析查询并对其进行故障排除。
默认情况下,EXPLAIN 输出将查询计划表示为层次结构,其中每个级别表示优化器定义为执行查询的单个数据库操作。若要习惯 EXPLAIN 的输出需要一些练习。但是练习得越多,你就越能更好地了解查询中需要调整的地方。
在 Navicat for MySQL 的 SQL 编辑器中有一个按钮可以运行 EXPLAIN 命令。结果会以易于阅读的网格格式显示:
查询分析
你可以使用查询分析来测量查询执行时间。这是在 MySQL 中的操作方法:
- 通过以下命令启动探查器:
SET profiling = 1;
- 然后使用以下命令运行查询:
SHOW PROFILES;
- 然后,你将看到探查器具有统计信息的查询列表。使用以下语句选择要检查的查询:
SHOW PROFILE FOR QUERY 1;
...或分配给查询的数字。
然后,你将获得一个列出了查询期间确切花费了多少时间的列表:
你还可以获取 CPU 使用率的分析:
使用 Navicat Monitor 分析查询性能
Navicat Monitor 是一套安全、简单而且无代理的远程服务器监控工具。它具有强大的功能使你的监控发挥最大效用。受监控的服务器包括 MySQL、MariaDB 和 SQL Server,并与 Amazon RDS、Amazon Aurora、Oracle Cloud、Microsoft Azure、阿里云、腾讯云和华为云等云数据库兼容。查询分析器画面显示所有正在运行的查询的信息。你可以使用它来进一步分析和评估查询性能:
画面分为几个部分:
- 最新的死锁查询:显示在已选择实例中检测到的最新死锁的事务信息。
- 进程列表:显示已选择实例的运行中进程总数,并列出最后 5 个进程,包括 ID、命令类型、用户、数据库和时间信息。
- 查询分析器:以可自定义和可排序的列显示有关查询语句的信息。
总结
在今天的文章中,我们介绍了一些在 MySQL 8 中尽可能快地进行查询的技术。
如果你对 Navicat Monitor 感兴趣,可以免费 试用 14 天!