删除表数据我们通常会使用delete语句来删除,但是执行完delete语句删除了表中部分数据后你会发现表对应的存储文件大小并不会缩小,如果要进一步释放被删除数据的空间需要执行optimize table tablename命令来进行优化(详情可看看这篇文章:http://blog.51yip.com/mysql/1222.html)。如果表的数据量非常巨大比如项目里一些日积月累不断变大的日志表,使用delete语句删除部分过期的日志数据可能需要执行很长时间,想要释放存储空间使用optimize优化也要优化很长时间,用truncate把整个表也不合适,这种情况下建表的时候可以将表建成分区表,删数据的时候直接删表分区。
下面我们来做一个小实验来测试这两种删数据的方式
首先建一张名为test_log以时间字段为分区的表:
CREATE TABLE `test_log` (
`product_id` varchar(20) DEFAULT NULL COMMENT '客户端的产品标识',
`client_version` varchar(20) DEFAULT NULL COMMENT '客户端的版本号简称',
`os_type` varchar(20) DEFAULT NULL COMMENT '用户手机操作系统的类型',
`imsi` varchar(50) DEFAULT NULL COMMENT '用户手机的 IMSI 号',
`insert_time` datetime DEFAULT NULL COMMENT '当前日志记录的入库时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMEN