mysql 查询慢 如何优化

2023年 8月 10日 65.3k 0

MySQL 查询慢是很常见的问题。在优化查询之前,我们需要找出查询的问题在哪里。

对于一个查询,我们可以使用 EXPLAIN 命令来查看查询的执行计划。EXPLAIN 输出的结果会显示 MySQL 执行查询时的各种信息,如扫描的行数、索引的使用情况等。我们可以根据这些信息来判断查询是否存在问题,以及优化的方向。

mysql>EXPLAIN SELECT * FROM users WHERE age >18;
+----+-------------+-------+------+---------------+------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+------+------+-------------+
| 1 | SIMPLE | users | ALL | NULL | NULL | NULL | NULL | 768 | Using where |
+----+-------------+-------+------+---------------+------+---------+------+------+-------------+

上面的查询会扫描整个 users 表,即使我们在 age 字段上创建了索引也不会用到。这是因为我们使用了 SELECT *,也就是查询所有字段。如果我们只查询需要的字段,如下所示:

mysql>EXPLAIN SELECT id, name FROM users WHERE age >18;
+----+-------------+-------+------+----------------------+-------------+---------+-------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+----------------------+-------------+---------+-------+------+-------------+
| 1 | SIMPLE | users | ref | idx_age | idx_age | 4 | const | 384 | Using index |
+----+-------------+-------+------+----------------------+-------------+---------+-------+------+-------------+

现在查询使用了 idx_age 索引,效率明显提高了。

另外,查询的 WHERE 条件中使用的函数也会导致查询变慢。如使用了日期函数,可以尝试将日期转换成 UNIX 时间戳,以便加速查询。

除此之外,可以考虑使用缓存和优化服务器硬件等方法来提高查询效率。

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论