Bài viết phổ biến của tác giả
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是在生产 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
Cảm ơn!
Traroth 的编辑:
1 Câu trả lời
您可以尝试在 active 和 deleted_at 列上建立索引
Tôi nghĩ delete_at 为 null
只是 ...
你可能想把它转换成nhỏ
,默认0(表示为null)
如果您进行批量删除,optimize table your_table;
将压缩数据以获得更好的性能。
关于mysql - 本地 mysql 服务器和生产 mysql 服务器之间的显着性能差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4715119/
Tôi là một lập trình viên xuất sắc, rất giỏi!