账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    mysql的innodb引擎数据库批量删除大量数据很慢
    57
    0

    因为不能用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条

    1
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 洋辣子 普通会员 1楼
      { "error": "Failed to generate content." }
    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部