精华内容
下载资源
问答
  • 批量删除重复数据

    2020-01-08 10:34:00
    多个字段分组进行批量删除 delete from a_b where a in( select a from a_b where c=0 group by a,b,d having count(a)>1 ) and id(唯一键) not in( select max(id) from a_b wher...

    多个字段分组进行批量删除

    delete from a_b

    where a in(

          select a from a_b

          where c=0

          group by a,b,d

          having count(a)>1

    ) and id(唯一键) not in(

          select max(id) from a_b

          where c=0

          group by a,b,d

          having count(a)>1

    )where c=0

    展开全文
  • mysql 存储过程批量删除重复数据 表结构: LOAD DATA INFILE '/usr/local/phone_imsi_12' replace INTO TABLE tbl_imsi2number_new FIELDS TERMINATED BY '\...

    表结构:

    LOAD DATA INFILE '/usr/local/phone_imsi_12' replace INTO TABLE tbl_imsi2number_new FIELDS TERMINATED BY '\t' ENCLOSED BY '' (number,imsi);

     

    先用SQL语句来进行去重操作:

    delete from tbl_imsi2number_new where imsi in (select imsi from (select imsi from tbl_imsi2number_new group by imsi having count(imsi) > 1) a) and number not in (select * from (select min(number) from tbl_imsi2number_new group by imsi having count(imsi) > 1 ) b);

    因为数据量太大(共计3亿多数据),所以:

    将开发那边拿过来的数据load data infile到大表里,不进行任何去重操作,没有任何约束。然后将这些数据分成几十个小文件,再load进几十个小表中,用这几十个小表去对比大表去重。得到去重后的小表。去重以后的小表,根据字段进行hash算出后两位数字(mod(conv(right(md5(imsi),2),16,10),100))进行批量插入。

    存储过程如下(去重):

    DELIMITER //

    /*tblname 动态控制表名*/
    CREATE PROCEDURE create_imsi(IN tblname varchar(200))
    begin
    declare age int default 1;
    declare done int(1) default 0;
    declare v_imsi varchar(200);

    /*定义游标*/
    declare cur_l cursor for select imsi from sqlstr;

    /*定义异常*/
    DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' set done=1;
    drop view if exists sqlstr;

    /*定义视图*/
    set @tbl = CONCAT("create view sqlstr as select a.imsi from tbl_new a,(select imsi from phone_",tblname," group by imsi having count(imsi) > 1) b where a.imsi = b.imsi group by imsi");

    /*执行视图语句*/

    PREPARE stmt FROM @tbl;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
    OPEN cur_l;
    FETCH cur_l INTO v_imsi;
    while (done <> 1)
    do

    /*对比大表数据,删除小表中的重复数据*/
    set @del = CONCAT("delete from phone_",tblname," where imsi=",v_imsi);
    PREPARE stmt1 FROM @del;
    EXECUTE stmt1;
    DEALLOCATE PREPARE stmt1;
    FETCH cur_l INTO v_imsi;
    end while;
    close cur_l;
    end//

    DELIMITER ;

    2、根据hash算法插入新表:

    DELIMITER //
    CREATE PROCEDURE insert_imsi(IN tblname varchar(20))
    begin
    declare age int default 1;
    declare done int(1) default 0;
    declare done1 int(1) default 0;
    declare v_imsi varchar(200);
    declare v_e varchar(2000);
    declare v_number varchar(3000);
    declare v_ctype varchar(2000);
    declare cur_l cursor for select split from sqlstr;
    DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' set done=1;
    DECLARE CONTINUE HANDLER FOR 1146 set done1=3;
    DECLARE CONTINUE HANDLER FOR SQLSTATE '23000' set done1=1;
    DECLARE CONTINUE HANDLER FOR SQLSTATE '42000' set done1=2;
    DECLARE CONTINUE HANDLER FOR SQLSTATE 'HY000' set done1=3;
    drop view if exists sqlstx;
    drop view if exists sqlstr;
    set @sqlstx = CONCAT("create view sqlstr as SELECT imsi,number,ctype,mod(conv(right(md5(imsi),2),16,10),100) split from imsi_phone_",tblname);
    PREPARE stmt1 FROM @sqlstx;
    EXECUTE stmt1;
    DEALLOCATE PREPARE stmt1;
    OPEN cur_l;
    WHILE done <> 1
    DO
      FETCH cur_l INTO v_e;
      set @ins = concat("insert into imsi_",v_e,"(imsi,number,ctype) select imsi,number,ctype from sqlstr where split = '",v_e,"'");
      PREPARE stmt3 FROM @ins;
      EXECUTE stmt3;
    END WHILE;
    close cur_l;
    end//

    DELIMITER ;

     报错:1、ERROR 1243 (HY000) at line 1: Unknown prepared statement handler (stmt3) given to EXECUTE

       2、ERROR 1054 (42S22) at line 1: Unknown column '000cdc41b2a02518' in 'where clause'

    由于set @dat = concat("insert into imsi_",v_e,"(imsi,number,ctype) select imsi,number,ctype from imsi_phone_",tblname," where imsi=‘’",v_imsi,“‘’”);没有在(=)那里加单引号,因为字段里有字母。

    参数优化:

    由于建表使用innodb引擎,所以此优化是针对innodb引擎的:

    1、innodb_flush_log_at_trx_commit参数设置为1,减少刷新。
    2、set sql_log_bin=0  暂时不产生二进制日志
    3、sync_binlog  设置为0,减少刷新
    4、innodb_buffer_pool_size    尽可能设置最大
    5、set foreign_key_checks=0  去除外键检查
    6、减少不必要的索引,有重复数据的话,主键是必须要的
    7、innodb_change_buffer_max_size    上限为50,这里我设置为40,因为load是插入数据,所以设置插入缓冲
    8、binlog_cache_size  如果必须要开启二进制日志,设置此参数尽可能大,因为sync_binlog设置为0,所以缓冲应该大
    9、innodb_flush_method    刷新模式,设置为O_DIRECT
    10、innodb_io_capacity    刷新脏页,根据你的硬盘设置,SAS设置800--900
    11、innodb_log_buffer_size与innodb_sort_buffer_size  尽可能设置最大
    12、unique_checks  设置为不检查:set unique_checks=0;
    13、alter table tablename disable keys;设置表忽略索引,如果有。

    14、设置自动提交为0,减少日志刷新:SET autocommit=0;

    15、设置innodb_autoinc_lock_mode=2

    16、设置主键,聚簇索引,按照主键顺序插入会更快

    posted on 2018-04-25 11:16  叶落千尘 阅读( ...) 评论( ...) 编辑 收藏

    转载于:https://www.cnblogs.com/magmell/p/8941338.html

    展开全文
  • 二、批量删除重复数据 一、批量创建1万多条数据 数据库车辆信息表中准备10000多台车的数据: (1)创建线程组,循环1次: (2)连接数据池: (3)添加循环控制器,循环15000次,超过10000是因为接下来的...

    目录

    一、批量创建1万多条数据

    二、批量删除重复数据



    一、批量创建1万多条数据

    数据库车辆信息表中准备10000多台车的数据:

    (1)创建线程组,循环1次:


    (2)

    展开全文
  • elasticsearch中录入了许多重复数据,比如说我有username和password两个字段,elasticsearch中拥有许多username和password两个字段都一样但是id不一样的记录,该如何删除重复的数据只保留一条呢?在线等,挺急的。...
  • 二、批量删除重复数据 一、批量创建1万多条数据 数据库车辆信息表中准备10000多台车的数据: (1)创建线程组,循环1次: (2)连接数据池: (3)添加循环控制器,循环15000次,超过10000是因为接下来的函数会...

    目录

    一、批量创建1万多条数据

    二、批量删除重复数据



    一、批量创建1万多条数据

    数据库车辆信息表中准备10000多台车的数据:

    (1)创建线程组,循环1次:


    (2)连接数据池:


    (3)添加循环控制器,循环15000次,超过10000是因为接下来的函数会生成重复的车牌号,要去掉重复数据,避免去掉后数据少于10000(模拟新增10000条数据):


    (4)新建新增车辆信息JDBC Request:

    其中,车牌号运用jmeter的函数助手生成随机5位数,范围在20000~40000之间,20000个随机数,范围大于10000,使得重复的车牌号数据少一点:鄂A${__Random(20000,40000,)}:


    (5)运行可生成15000条数据:



    二、批量删除重复数据

    (1)查询车牌号重复的所有数据:

    
     
    1. -- 查询出common_car_info表中car_number重复的数据,car_number升序排列
    2. select * from common_car_info where car_number in ( select car_number from common_car_info group by car_number having count(car_number) > 1)
    3. ORDER BY car_number ASC

     


    (2)  删除表中多余的重复记录,重复的车牌号数据都不保留:

    
     
    1. -- 删除表中多余的重复记录,重复记录是根据单个字段(car_number)来判断,重复的车牌号数据都不保留
    2. DELETE FROM common_car_info
    3. WHERE car_number IN
    4. ( SELECT car_number FROM ( SELECT car_number FROM common_car_info GROUP BY car_number HAVING count(car_number) > 1)e)

     

     


     (3)  查询车牌号重复但不包括id最小的所有数据:

    
     
    1. select * from common_car_info
    2. WHERE car_number IN
    3. ( SELECT car_number FROM ( SELECT car_number FROM common_car_info GROUP BY car_number HAVING count(car_number) > 1 )e)
    4. AND id NOT IN
    5. ( SELECT min( id) FROM ( SELECT min( id) FROM common_car_info GROUP BY car_number HAVING count(car_number) > 1)f)

     


    (4)删除表中多余的重复记录,重复的车牌号只保留id最那一条的数据:

    
     
    1. -- 删除表中多余的重复记录,重复记录是根据单个字段(car_number)来判断,只保留id最小的一条数据
    2. -- 注意:因为用了子查询,所以需要 DELETE 后引用表别名
    3. DELETE C.* FROM common_car_info C
    4. WHERE
    5. car_number IN
    6. ( SELECT car_number FROM ( SELECT car_number FROM common_car_info GROUP BY car_number HAVING count(car_number) > 1 )e)
    7. AND
    8. id NOT IN
    9. ( SELECT min( id) FROM ( SELECT min( id) FROM common_car_info GROUP BY car_number HAVING count(car_number) > 1)f)

     

    展开全文
  • 用于两个excel文档中,删除重复的部分
  • 如何高效删除重复数据?用诸如: rowid,id相等,速度太慢了。对于大数据量的表的做插入,效率最好的是用临时表。   基本上就是这么一流程:   drop table t1 create table t1 as select ctemp.id ,max...
  • 之前的博文里面整理了ORACLE分批删除无主键重复数据,但是对于原表数据量大的情况可能会无法快速执行。本文对针对原表数据量大,分批删除无主键重复数据的方法进行整理归纳。
  • 这样生成的uuid所有数据均为相同   orcal截取字符串 如 bmfw.snb.qz 这个字符串 截取得到未bmfw select substr(loginname,0,INSTR(loginname,'.', 1, 1)-1) from GOVERNMENTSYNCUSERRECORD; loginname为...
  • oracle 批量插入时,如何去除重复数据

    千次阅读 2017-06-06 23:44:46
    用储存过程批量抽取一个视图的数据,插入到一个新建的表,视图数据有2.4亿,昨天抽取到6千万就卡住了,不知道什么原因,想继续执行这个存储过程,想请问加什么条件来避免插入那些已经插入过的数据 视图上有唯一性字段 XH...
  • 删除重复数据 1、delete from t1 where exists(select 1 from t1 a where a.id>t1.id and t1.col1=a.col1)  2、alter table t1 add (id int identity(1,1))   delete from t1  where id not in (select min(id)...
  • 删除重复数据 1、delete from t1 where exists(select 1 from t1 a where a.id>t1.id and t1.col1=a.col1)  2、alter table t1 add (id int identity(1,1))   delete from t1  where id not in (select min(id)...
  • 获取重复数据后保留最小值ID后进行批量删除 代码如下: controller: /** * 更新并删除重复数据 */ @Async @GetMapping("/up") @ApiOperation(value = "更新并删除重复数据", notes = "更新并删除重复数据") ...
  • <?xml version="1.0" encoding="UTF-8"?>4.0.0org.springframework.boot spring-boot-starter-parent 2.3.0.RELEASEcn.idea360 idc-mp 0.0.1idc-mpDemo project for Spring Boot1.8org.springframework.boot ...
  • MYSQL避免批量插入重复数据报错的解决方案

    千次阅读 热门讨论 2018-07-06 18:58:24
    在mysql中,想要批量的插入数据到数据库,会使用这样的语句 INSERT INTO mytable (title, NAME, date) VALUES ( 'My title', 'My name', 'My date' ), ( 'Another title', 'Another n...
  • Mysql批量插入时重复数据问题

    千次阅读 2020-04-15 16:31:57
    之前写的代码批量插入遇到了问题,原因是有重复数据(主键或唯一索引冲突),所以插入失败。现在总结一下如何解决批量插入数据重复问题。 三种方法: insert ingnore into:若没有则插入,若存在则忽略 insert ...
  • 批量增加数据例如: INSERT INTO T_COLUMN_REFER_ARTICLE( COLUMN_ID,GLOBLE_ID) SELECT 10062, 537836 UNION ALL SELECT 10062, 537919 UNION ALL SELECT 10062, 534171 ...删除表中重复数据: DELE...
  • 概述 本篇是 POI系列 的最后一篇。传送门 Java 开发中...Excel 中本身存在重复数据, 即本次导入存在重复数据; 数据库中已经存在了该条数据, 即历史导入存在重复数据; 为了减轻数据库的压力, 这里在设计中引入缓存 .
  • 怎么样插入不重复数据? 谢谢 /// <summary> /// 专辑--文档添加 /// 被引用:AdminController.LibIndex:Post /// </summary> /// <param name="guidArr">文章Guid数组</...
  • 或者是需要对原有数据进行批量修改,删除等,要如何进行。 下面Insus.NET举个简单的例子。 先是在数据库创建一张表,是用来存储用户上传的数据。 CREATE TABLE [dbo].[Network_Register] ( [I...
  • 如何批量删除重复要素

    千次阅读 2017-02-06 17:39:10
    如果要素类或表中的记录在字段列表中具有相同值,则可使用GP工具Delete Identical(删除相同的)删除这些记录。
  • 利用分组排序,实现快速、安全、批量删除重复记录
  • 概述 本篇是 POI系列 的最后一篇。传送门 Java 开发中如何用 POI ...Excel 中本身存在重复数据, 即本次导入存在重复数据; 数据库中已经存在了该条数据, 即历史导入存在重复数据; 为了减轻数据库的压力, 这里在设...
  • 最近在做一个批量数据导入到MySQL数据库的功能,从批量导入就可以知道,这样的数据在插入数据库之前是不会进行重复判断的,因此只有在全部数据导入进去以后在执行一条语句进行删除,保证数据唯一性。 下面话不多说了...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 80,861
精华内容 32,344
关键字:

怎样批量删除重复数据