gpt4 book ai didi

mysql - 本地 mysql 服务器和生产 mysql 服务器之间的显着性能差异

转载 作者:行者123 更新时间:2023-11-30 23:39:23 31 4
gpt4 key购买 nike

我是在生产 MySQL 中运行的应用程序的新维护者。之前的维护者已经离开,留下的文档很少,而且联系不上了。

我面临的问题是执行以下请求大约需要 10 秒:

SELECT COUNT(*) FROM `users` WHERE (`active` = TRUE AND `deleted_at` IS NULL);

users 表中大约有 170,000 条记录,没有索引。

此请求的 EXPLAIN 命令:

mysql> EXPLAIN SELECT COUNT(*) FROM `users` WHERE (`active` = TRUE AND `deleted_at` IS NULL);
+----+-------------+-------+------+---------------+------+---------+------+--------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+------+--------+-------------+
| 1 | SIMPLE | users | ALL | NULL | NULL | NULL | NULL | 145407 | Using where |
+----+-------------+-------+------+---------------+------+---------+------+--------+-------------+

当前网站所有者(非技术人员)告诉我,性能在 2 周前突然下降。因此,在尝试添加索引之前,我已将生产数据库转储到本地 MySQL 服务器中。同样的请求在本地只需要 4 秒。

我对这种差异感到非常惊讶,我想知道操作系统或 MySQL 服务器的某些问题是否可能解释它?值得这样研究吗?如果是这样怎么办?如果不是,对于没有索引的这种查询,这种性能是否“正常”(我对 SQL 性能的经验有限)?

在服务器上:

$ mysql -u root --version
mysql Ver 14.14 Distrib 5.1.44, for unknown-linux-gnu (x86_64) using readline 5.1
$ cat /etc/redhat-release
CentOS release 5.4 (Final)

本地机器:

$ $ mysql -u root --version
mysql Ver 14.14 Distrib 5.1.42, for apple-darwin10.2.0 (i386) using EditLine wrapper

谢谢!

Traroth 的编辑:

  • RAM:生产环境 4GB,本地机器 2GB
  • 请求缓存:确实在本地机器上后续请求要快得多,在生产中它也变得更好但仍然太慢(最好情况下大约 5 秒)。你认为这正常吗?
  • 两个数据库都使用 InnoDB
  • 文件系统:production box 是 VPS,当我查找文件系统时会出现“simfs”

最佳答案

您可以尝试在 active 和 deleted_at 列上建立索引

我认为 delete_at 为 null 只是 ...

你可能想把它转换成smallint,默认0(表示为null)

如果您进行批量删除,optimize table your_table; 将压缩数据以获得更好的性能。

关于mysql - 本地 mysql 服务器和生产 mysql 服务器之间的显着性能差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4715119/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com