首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PostgreSQL唯一索引性能

PostgreSQL唯一索引性能
EN

Stack Overflow用户
提问于 2020-07-26 11:08:42
回答 2查看 180关注 0票数 0

我有一个脚本,做一些网络抓取新闻,然后上传的信息,我刮到一个PostgreSQL数据库在RDS。我的问题是关于确保同一篇新闻文章不被记录超过一次的首选方法。

每次我刮的时候,网络刮刀会返回40篇新闻文章。我设置了它,以便将每一篇文章+标题添加到标题列具有唯一键约束的表中。因此,为了确保每篇文章只记录一次,我有两个选项:

  1. 使用简单的尝试,除了尝试将每一篇文章+标题插入到表中--如果标题已经存在但被忽略,则返回错误。
  2. ,或者,我可以查询数据库中最近添加的40篇文章,将它们的标题与我所选的标题进行比较,然后只插入那些尚未在数据库中的标题。

我的问题是:哪一个在性能上会更好?我猜想,如果第一篇文章的数量较少,会更好,但随着文章数量的增加,使用第二篇文章会更好,对吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-26 12:31:58

exist

  • 创建一个临时表,与目标表

  • 相同--将您刮到的文章放到这个temp

  • 中,删除这个temp

  • 中的重复项,将临时表中的记录插入到实际的表中,,但只插入那些还没有

  • 的记录。

下面是我推特刮板上的片段:

代码语言:javascript
复制
    ins2 = """INSERT INTO tweets(id,sucker_id,created_at,user_id
            ,in_reply_to_id,is_reply_to_me,is_retweet,body)
     SELECT tt.id,tt.sucker_id,tt.created_at,tt.user_id
         ,tt.in_reply_to_id,is_reply_to_me,is_retweet,tt.body
     FROM tt_tweets tt
     WHERE NOT EXISTS( SELECT 1 FROM tweets nx where nx.id = tt.id)
       ;"""

而且:tweet有一个数字id,这使得脱扣变得非常容易。

票数 1
EN

Stack Overflow用户

发布于 2020-07-26 14:12:39

在本地识别刮刀的副本比往返数据库要快得多,前提是它不是以愚蠢的方式完成的。但是,与一开始进行刮擦的开销相比,这种差别是不可能有意义的。

但是,如果刮刀有一个有限的记忆标题,你将需要有一个捕获和忽略的能力无论如何。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63099289

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档