我有一个users
表与日期时间字段last_seen_at
。更新这个字段大约需要120ms,而且我希望它快很多,因为我在我的网站上几乎每个页面上都做了这个。我无法弄清楚为什么它如此缓慢:大约有55,000条记录不应该有问题(我想过)。如何加快MYSQL更新?
这里的表信息:
mysql> show table status like 'users'; +-------+--------+---------+------------+-------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+-----------------+----------+----------------+---------+ | Name | Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time | Update_time | Check_time | Collation | Checksum | Create_options | Comment | +-------+--------+---------+------------+-------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+-----------------+----------+----------------+---------+ | users | InnoDB | 10 | Compact | 55609 | 954 | 53051392 | 0 | 43352064 | 26214400 | 67183 | 2015-09-22 13:12:13 | NULL | NULL | utf8_general_ci | NULL | | | +-------+--------+---------+------------+-------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+-------------+------------+-----------------+----------+----------------+---------+ mysql> desc users; +---------------------------------+--------------+------+-----+-----------------+----------------+ | Field | Type | Null | Key | Default | Extra | +---------------------------------+--------------+------+-----+-----------------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | last_seen_at | datetime | YES | MUL | NULL | | +---------------------------------+--------------+------+-----+-----------------+----------------+ mysql> show indexes from users; +-------+------------+------------------------------------------------+--------------+---------------------------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | +-------+------------+------------------------------------------------+--------------+---------------------------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | users | 0 | PRIMARY | 1 | id | A | 57609 | NULL | NULL | | BTREE | | | | users | 1 | index_users_on_last_seen_at | 1 | last_seen_at | A | 57609 | NULL | NULL | YES | BTREE | | | +-------+------------+------------------------------------------------+--------------+---------------------------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
正如你可以看到我已经上了last_seen_at列的索引了。为了清楚起见,我已经省略了所有其他列(除了id)。
当我更新last_seen_at我做它像这样:
update users set last_seen_at = '2015-10-05 12:34:45' where id = 1182;
MySQL服务器信息: Server version: 5.5.44-0ubuntu0.12.04.1 (Ubuntu)
有什么我可以做,以加快更新?
编辑 - 我以前说过的查询正在采取700毫秒。它实际上更像是120ms,对不起,我正在查看错误的查询。尽管如此,这仍然感觉有点过长。毕竟,这实际上是一个合理的写入时间吗?
编辑 - 我所有的时间都来自mysql shell客户端手动输入sql查询。我在我的Ruby on Rails网络应用程序中使用了MySQL,但该应用程序并未涉及此问题的目的:我纯粹是在查看数据库级别。
分享您的更新声明 – lad2025
UPDATE如何查看? – jarlh
对不起,现在补充。 –