查询需要一个多小时。
任何人都可以帮忙吗?预先感谢。
我的查询是
UPDATE coupons SET expiration_date='2020-06-06'
我的表格结构
+-----------------------+--------------------------------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------------------+--------------------------------------------+------+-----+---------+----------------+
| id | int(11) unsigned | NO | PRI | NULL | auto_increment |
| vendor_id | int(11) | NO | MUL | NULL | |
| type | enum('food','shopping','home','lifestyle') | NO | | NULL | |
| title | varchar(255) | NO | MUL | NULL | |
| slug | varchar(255) | YES | | NULL | |
| thumbnail_image | varchar(600) | YES | | NULL | |
| coupon_name | varchar(255) | NO | | NULL | |
| expiration_date | date | YES | MUL | NULL | |
| discount_type | enum('d','p') | YES | | NULL | |
| discount_rate | double(7,2) | YES | | NULL | |
| code_type | enum('i','c','u','b') | NO | | NULL | |
| code | text | YES | | NULL |
| created_at | datetime | YES | | NULL | |
| updated_at | datetime | YES | | NULL |
+-----------------------+--------------------------------------------+------+-----+---------+----------------+
答案 0 :(得分:1)
其他人指出,您的UPDATE
语句更新表中的每一行。从本质上讲,这需要很长时间。并且,由于数据库中的事务/回滚,将占用大量RAM和磁盘空间。
您没有告诉我们如何在expiration_date
上定义索引,所以这个答案有点猜测。具体来说,除非expiration_date
在其自己的索引中或在复合索引的第一列中,否则该答案的效果将不佳。
尝试使用这样的UPDATE查询,一次更新1000行。
UPDATE coupons
SET expiration_date='2020-06-06'
WHERE expiration_date <> '2020-06-06'
LIMIT 1000
重复查询,直到不再更新任何行。完成更新仍需要一段时间,但不会垄断该表,也不会产生大量交易。
警告,不要一次运行多个查询。