mysql 处理大数据太慢_mysql的innodb引擎数据库批量删除大量数据很慢

2022-09-25 10:28:42

因为不能用Truncate(因为只是删除其中少部分数据),由于要求此表中的数据只保留当天的数据,所以每当在凌晨的某一时刻当其他程序处理完其中的数据后要删除该表中昨天以及以前的数据,使用delete删除表中的上百万条记录时,MySQL删除速度非常缓慢每一万条记录需要大概4分钟左右,这样删除所有无用数据要达到八个小时以上,这是难以接受的。。

网上搜到此文(http://blog.csdn.net/gao14401...[MSSQL、MySQL 数据库删除大批量千万级百万级数据的优化]

其中说到每次删除记录,数据库都要相应地更新索引,这是很慢的IO操作,而且后面索引碎片越来越多,就更慢。

我采取其提供的删除索引再删除数据再重建索引的方法,并没有发现删除速度有提升,而且时不时还会死锁

我的数据表结构如下:

CREATE TABLE `tbplaylog_copy` (

`Pid` int(11) NOT NULL AUTO_INCREMENT,

`Company_id` int(11) NOT NULL DEFAULT '0' COMMENT '??id',

`uid` int(11) NOT NULL COMMENT '"??ID"',

`Devno` varchar(32) CHARACTER SET utf8 NOT NULL COMMENT '????',

`Ad` int(11) NOT NULL COMMENT '????',

`MakeTime` int(11) NOT NULL COMMENT '????',

`LastTime` int(11) NOT NULL COMMENT '??????',

`StartTime` int(11) NOT NULL COMMENT '???????(0,24*60)',

`EndPoint` int(11) NOT NULL COMMENT '????????(0,24*60)',

`Status` int(11) NOT NULL COMMENT '???1-????0-???',

`Note` varchar(128) CHARACTER SET utf8 NOT NULL DEFAULT '' COMMENT '????',

`Valid` int(11) NOT NULL COMMENT '???',

`Type` int(11) NOT NULL COMMENT '0,???1????2???',

`PlayStartTime` int(11) NOT NULL DEFAULT '0',

`PlayEndTime` int(11) NOT NULL DEFAULT '0',

`DownloadTime` int(11) NOT NULL DEFAULT '0',

`DeleteTime` int(11) NOT NULL DEFAULT '0',

`TemplateId` int(11) NOT NULL DEFAULT '0',

`ad_adnum` int(11) NOT NULL COMMENT '???ad_id',

`length` int(11) NOT NULL,

`DownloadPercent` int(11) NOT NULL DEFAULT '0' COMMENT '???????',

`DownloadSuccess` int(11) NOT NULL DEFAULT '0' COMMENT '\r\n0-??\r\n1-??”',

`Playlist_id` int(11) NOT NULL,

`Delete` tinyint(1) NOT NULL DEFAULT '0' COMMENT '1???',

`Reset` tinyint(1) NOT NULL DEFAULT '0' COMMENT '1???',

`source` int(2) NOT NULL,

`distribute` int(2) NOT NULL DEFAULT '-2' COMMENT '0??-2??',

PRIMARY KEY (`Pid`),

KEY `starttime` (`StartTime`) USING BTREE,

KEY `Devno` (`Devno`),

KEY `playstarttime` (`PlayStartTime`),

KEY `index_playlist_id` (`Playlist_id`),

KEY `ad` (`Ad`),

KEY `company_id` (`Company_id`)

) ENGINE=InnoDB AUTO_INCREMENT=8760113 DEFAULT CHARSET=latin1;

我的删除语句

DELETE * FROM tbplaylog WHERE tbplaylog.StartTime < ? OR tbplaylog.StartTime > ? ORDER BY Pid LIMIT 10000

数据量为1000w条

  • 作者:weixin_39623350
  • 原文链接:https://blog.csdn.net/weixin_39623350/article/details/112865322
    更新时间:2022-09-25 10:28:42