Mysql性能:删除vs删除+;优化

Mysql性能:删除vs删除+;优化,mysql,performance,optimization,Mysql,Performance,Optimization,我有一个表,它是我的系统的核心,所有显示给客户的结果都存储在那里。它增长非常快,因此每3小时我就应该删除比X早的记录,以提高性能 仅删除这些记录就足够了,还是应该在删除后运行优化表 我正在考虑每3小时删除一次,每天和晚上只运行一次Optimize,但我不确定删除是否足以提高性能。如果您使用InnoDB,请不要使用Optimize TABLE;这不值得努力 如果您总是删除“最旧”的行,那么有一种更快速、更有效的方法。而且它本身不需要优化。按日期对表进行分区,然后删除分区。每个分区将是独立的结构;因

我有一个表,它是我的系统的核心,所有显示给客户的结果都存储在那里。它增长非常快,因此每3小时我就应该删除比X早的记录,以提高性能

仅删除这些记录就足够了,还是应该在删除后运行
优化表


我正在考虑每3小时删除一次,每天和晚上只运行一次Optimize,但我不确定删除是否足以提高性能。

如果您使用InnoDB,请不要使用
Optimize TABLE
;这不值得努力

如果您总是删除“最旧”的行,那么有一种更快速、更有效的方法。而且它本身不需要
优化
。按日期对表进行分区,然后
删除分区
。每个分区将是独立的结构;因此,删除一个分区不会分割表的其余部分


有关更多详细信息,请参阅。

如果您使用的是InnoDB,请不要使用
优化表
;这不值得努力

如果您总是删除“最旧”的行,那么有一种更快速、更有效的方法。而且它本身不需要
优化
。按日期对表进行分区,然后
删除分区
。每个分区将是独立的结构;因此,删除一个分区不会分割表的其余部分


有关更多详细信息,请参阅。

如果您将自动增量id作为主键,我怀疑您是否会看到任何差异(这可能取决于您拥有和使用的其他索引)。当然,您可以对其进行测试,因为5.7.4
optimizetable
将不再锁定,所以它也不会造成太大的伤害(它当然仍然会使用i/o),所以您可以双向操作。但我想一般来说,我只会在正常的夜间维护期间进行(当然不知道您的具体设置)。可以将事件看作是定时的重复存储过程,而不需要cron的麻烦。他们被设置好了,忘记了。因此,忘记它们的执行是有缺点的。不时提醒自己:“哦,我忘了,我有事件在做那个。”如果您有一个自动增量id作为主键,我怀疑您是否会看到任何差异(这可能取决于您拥有和使用的其他索引)。当然,您可以对其进行测试,因为5.7.4
optimizetable
将不再锁定,所以它也不会造成太大的伤害(它当然仍然会使用i/o),所以您可以双向操作。但我想一般来说,我只会在正常的夜间维护期间进行(当然不知道您的具体设置)。可以将事件看作是定时的重复存储过程,而不需要cron的麻烦。他们被设置好了,忘记了。因此,忘记它们的执行是有缺点的。时不时地提醒自己:“哦,我忘了,我已经安排好了这样的活动。”