我使用的是MySql 5.5.46,并且有一个包含位列的InnoDB表(名为“ENABLED”)。此列没有索引。该表有2600万行,所以可以理解的是,语句
DELETE FROM my_table WHERE ENABLED = 0;
需要很长时间。我的问题是,有什么我可以做的(不升级MySQL,这目前不是一个选项),以加快运行这个查询所需的时间?我的“innodb_buffer_pool_size”变量设置如下:
show variables like 'innodb_buffer_pool_size';
+-------------------------+-------------+
| Variable_name | Value |
+-------------------------+-------------+
| innodb_buffer_pool_size | 11674845184 |
+-------------------------+-------------+
发布于 2015-12-09 00:00:43
在PRIMARY KEY
的基础上,以1000为单位进行DELETE
。参见。这篇文章详细介绍了分块的有效方法,以及如何处理PK中的差距。
(有了11 of的buffer_pool,我假设你有16 of的内存?)
通常,如果要选择的行数大于总行数的20%,则MySQL将执行表扫描,而不是使用索引。因此,几乎从来没有“标志”字段本身值得索引。
https://stackoverflow.com/questions/34076413
复制