您的位置:威尼斯官方网站 > 威尼斯官方网站登录 > 看似的替代写法在MySQL中作用也低的势不两立

看似的替代写法在MySQL中作用也低的势不两立

发布时间:2019-11-12 15:39编辑:威尼斯官方网站登录浏览(174)

    威尼斯官方网站,明日遭遇三个内需对表进行去重的主题材料,数据量大致千万左右,第意气风发取舍正是按Oracle的笔触上:

    delete from table t1 where id < (select max(id) from table t2 where t1.c1=t2.c1);  --将c1值相同的记录进行去重,只留下id最大的,写成id>min(id)效果相同。
    

    以上相关子查询的SQL在c1上设有索引时间效果与利益率不算低,然则很可惜MySQL未有这种写法,相通的代替写法在MySQL中效用也低的令人切齿,如中间表等手段。

    无独有偶在下三个月收拾一些shell脚本时管理过mysql导入时出错继续实践的难题,因而测量检验后使用了之类办法:

    1.将表数据导出:

    mysqldump -uroot -p --skip-extended-insert -t DBNAME TABLE>TABLE.sql
    
    然后记一下去重后的记录数:
    select count(*) from (select 1 from TABLE group by c1) a;
    

    2.truncate表,然后成立独一索引

    truncate table TABLE;
    create unique index IX_c1 on TABLE(c1);
    

    3.末尾导入数据,须要加上-f选项。

    mysql -uroot -p -f DBNAME<TABLE.sql
    

    -f的意义是:Continue even if an SQL error occurs.

    那般导入时会报非常多的大谬不然,正是因为唯大器晚成节制的留存,你只需求最终检查下表的记录数时候与第一步中查到的数码生机勃勃致就能够了。

    这种去重格局功用相比较高,缺陷也许是失误时显示屏上一群的‘Duplicate entry’报错会湮灭别的的报错。

    其余还是能写存储进程来删除重复数据,这种方法对数据库的熏陶相当小,无需导出导入数据,存款和储蓄进度写法详见:

    本文由威尼斯官方网站发布于威尼斯官方网站登录,转载请注明出处:看似的替代写法在MySQL中作用也低的势不两立

    关键词:

上一篇:或 GROUPING SETS 聚合而发生的行

下一篇:没有了