该解决方案完成后可以提供更好的性能,但是该过程可能需要一些时间才能实现。
BIT
可以添加一个新列,默认TRUE
为“活动”和FALSE
“非活动”。如果状态不够,则可以使用tinyint
256个可能的值。
添加此新列可能会花费很长时间,但是一旦结束,您的更新就应该快得多,只要您PRIMARY
像删除操作一样,不对这个新列编制索引就可以了。
InnoDB之所以花这么长时间DELETE
在如此庞大的表上,是因为集群索引。它根据您的PRIMARY
,首先UNIQUE
找到的表或可以找到的合适的替代表(如果找不到PRIMARY
或)将UNIQUE
其物理排序,因此,删除一行后,它现在将整个表在磁盘上重新排序以提高速度,碎片整理。所以花的时间不是DELETE
那么长;这是删除该行后的物理重新排序。
创建固定宽度的列并对其进行更新而不是删除时,由于行和表本身消耗的空间是恒定的,因此无需对巨大的表进行物理重新排序。