广告
返回顶部
首页 > 资讯 > 数据库 >Postgresql删除数据库表中重复数据的几种方法详解
  • 269
分享到

Postgresql删除数据库表中重复数据的几种方法详解

2024-04-02 19:04:59 269人浏览 泡泡鱼
摘要

一直使用postgresql数据库,有一张表是这样的: DROP TABLE IF EXISTS "public"."devicedata"; CREATE TABLE "public"."devicedata"

一直使用postgresql数据库,有一张表是这样的:

DROP TABLE IF EXISTS "public"."devicedata";
CREATE TABLE "public"."devicedata" (
  "Id" varchar(200) COLLATE "pg_catalog"."default" NOT NULL,
  "DeviceId" varchar(200) COLLATE "pg_catalog"."default",
  "Timestamp" int8,
  "DataArray" float4[]
)

CREATE INDEX "timeIndex" ON "public"."devicedata" USING btree (
  "Timestamp" "pg_catalog"."int8_ops" DESC NULLS LAST,
  "DeviceId" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST
);

ALTER TABLE "public"."devicedata" ADD CONSTRaiNT "devicedata_pkey" PRIMARY KEY ("Id");

主键为Id,是通过程序生成的GUID,随着数据表的越来越大(70w),即便我建立了索引,查询效率依然不乐观。

使用GUID作为数据库的主键对分布式应用比较友好,但是不利于数据的插入,可以使用类似abp的方法生成连续的GUID解决这个问题。

为了进行优化,计划使用DeviceId与Timestamp作为主键,由于主键会自动建立索引,使用这两个字段查询的时候,查询效率可以有很大的提升。不过,由于数据库的插入了很多的重复数据,直接切换主键不可行,需要先剔除重复数据。

使用group by

数据量小的时候适用。对于我这个70w的数据,查询运行了半个多小时也无法完成。

DELETE FROM "DeviceData"
WHERE "Id"
NOT IN (
SELECT max("Id")
FROM "DeviceData_temp"
GROUP BY "DeviceId", "Timestamp"
);

使用DISTINCT

建立一张新表然后插入数据,或者使用select into语句。

SELECT DISTINCT "Timestamp", "DeviceId"
INTO "DeviceData_temp"
FROM "DeviceData";
-- 删除原表
DROP TABLE "DeviceData";
-- 将新表重命名
ALTER TABLE "DeviceData_temp" RENAME TO "DeviceData";

不过这个问题也非常大,很明显,未来的表,是不需要Id列的,但是DataArray也没有了,没有意义。

如果SELECT DISTINCT "Timestamp", "DeviceId", "DataArray",那么可能出现"Timestamp", "DeviceId"重复的现象。

使用ON CONFLICT

如果我们直接建立新表格,设置好新的主键,然后插入数据,如果重复了就跳过不就行了?但是使用select into是不行了,重复的数据会导致语句执行中断。需要借助upsert(on conflict)方法。

INSERT INTO "DeviceData_temp"
SELECT * FROM "DeviceData"
on conflict("DeviceId", "Timestamp") DO NOTHING;
-- 删除原表
DROP TABLE "DeviceData";
-- 将新表重命名
ALTER TABLE "DeviceData_temp" RENAME TO "DeviceData";

执行不到100s就完成了,删除了许多重复数据。

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。如果你想了解更多相关内容请查看下面相关链接

您可能感兴趣的文档:

--结束END--

本文标题: Postgresql删除数据库表中重复数据的几种方法详解

本文链接: https://www.lsjlt.com/news/34323.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Postgresql删除数据库表中重复数据的几种方法详解
    一直使用PostgreSQL数据库,有一张表是这样的: DROP TABLE IF EXISTS "public"."devicedata"; CREATE TABLE "public"."devicedata"...
    99+
    2022-10-02
  • postgresql 删除重复数据案例详解
    1.建表 -- ---------------------------- -- Table structure for test -- ------------------...
    99+
    2022-11-12
  • mysql数据库删除表数据的方式有几种
    这篇文章将为大家详细讲解有关mysql数据库删除表数据的方式,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在MySQL中删除数据有两种方式:1、truncate(截短)属...
    99+
    2022-10-18
  • 删除数据库中重复数据的方法
    这篇文章主要介绍“删除数据库中重复数据的方法”,在日常操作中,相信很多人在删除数据库中重复数据的方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”删除数据库中重复数据的方法”...
    99+
    2022-10-18
  • 数据库删除表中数据的方法
    小编给大家分享一下数据库删除表中数据的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!数据库删除表中数据的方法:1、使用“dr...
    99+
    2022-10-18
  • MySql中删除数据表的方法详解
    目录定义:1 删除一个或多个没有被其他表关联的数据表1.1 新建一张表1.2 执行删除命令1.3 结果检查2 删除被其他表关联的主表2.1 创建两张具有关联关系的表2.2 执行删除DROP TABLE命令2.3 取消外键...
    99+
    2022-08-09
    mysql怎么删除数据库中的表 mysql删除数据表的方法 MySQL删除数据表
  • mysql删除数据库中重复记录的方法
    这篇文章给大家分享的是有关mysql删除数据库中重复记录的方法的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。mysql删除数据库中重复记录的步骤:1、统计重复数据;2、使用“SE...
    99+
    2022-10-18
  • MySQL中恢复被误删除表数据的方法详解
    在MySQL数据库中,有时会发生误删除表数据的情况,这可能是由于操作失误、程序错误或者恶意攻击等原因导致的。当发生这种情况时,及时采取恢复措施是非常重要的,以防止数据的永久丢失。本文将详细介绍在MySQL中恢复被误删除表数据的方法,并提供相...
    99+
    2023-12-23
    mysql 数据库
  • postgresql如何找到表中重复数据的行并删除
    目录PostgreSQL找到表中重复数据的行并删除创建测试表并插入数据找到重复行并删除postgresql常用的删除重复数据方法最高效方法PG中三种删除重复数据方法总结postgresql找到表中重复数据的行并删除 创建...
    99+
    2023-05-05
    postgresql删除重复数据 删除表重复数据行 postgresql重复数据删除
  • SQLServer删除表中的重复数据
    添加示例数据 create table Student( ID varchar(10) not null, Name varchar...
    99+
    2022-11-13
  • SQL删除重复数据的方法
    这篇文章将为大家详细讲解有关SQL删除重复数据的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在sql中,可以使用select语句删除重复数据,语法为:“s...
    99+
    2022-10-18
  • MySQL删除重复数据的方法
    这篇文章主要介绍MySQL删除重复数据的方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!最近在做一个批量数据导入到MySQL数据库的功能,从批量导入就可以知道,这样的数据在插入数据...
    99+
    2022-10-18
  • 【Mysql系列】mysql中删除数据的几种方法
    写在前面  在MySQL数据库中,删除数据是一个常见的操作,它允许从表中移除不再需要的数据。在执行删除操作时,需要谨慎,以免误删重要数据。 方法介绍 以下是MySQL中删除数据的几种方法: DELETE语句DROP T...
    99+
    2023-09-17
    mysql 数据库 原力计划
  • SQL中去除重复数据的几种方法汇总(窗口函数对数据去重)
    目录方法1:distinct方法2:group by方法3:窗口函数使用SQL对数据进行提取和分析时,我们经常会遇到数据重复的场景,需要我们对数据进行去重后分析。 以某电商公司的销售报表为例,常见的去重方法我们用到dis...
    99+
    2023-05-05
    sql去除重复数据 sql去重复
  • mysql查找删除表中重复数据方法总结
    在数据库表里,我们有时候会保存了很多重复的数据,这些重复的数据浪费资源,我们要将其删除掉,应该怎么处理呢?下面来看一下。 先看下我们的表数据,有一些数据是重复的。 要查找重复数据,我们可以使用mysql里...
    99+
    2022-10-18
  • mysql数据库去除重复数据的方法
    这篇文章主要介绍了mysql数据库去除重复数据的方法,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。mysql数据库去除重复数据的方法:1、查询需...
    99+
    2022-10-18
  • 详解Oracle 中实现数据透视表的几种方法
    数据透视表(Pivot Table)是 Excel 中一个非常实用的分析功能,可以用于实现复杂的数据分类汇总和对比分析,是数据分析师和运营人员必备技能之一。今天我们来谈谈如何在 Or...
    99+
    2022-11-12
  • 怎么在mysql数据库中删除重复的数据
    本篇文章为大家展示了怎么在mysql数据库中删除重复的数据,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1.问题引入假设一个场景,一张用户表,包含3个字段。id,identity_id,name。现...
    99+
    2023-06-07
  • mysql删除多个表格数据库数据的方法
    mysql删除多个表格数据库数据的方法?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!mysql删除多个表格数据库数据的方法...
    99+
    2022-10-18
  • mysql删除表中数据的方法
    这期内容当中小编将会给大家带来有关mysql删除表中数据的方法,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。语句为“DELETE FROM 表名称 WHER...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作