当它是组合键的一部分时,根据列值进行删除

时间:2019-03-12 14:50:02

标签: sql postgresql

我有一张桌子,桌子上有一个ID和一个日期。 (id,日期)组成表格的组合键。

我要执行的操作是删除所有早于特定日期的条目。

ldr w0, =my_addr

查询计划说明它将对日期列进行顺序扫描。

我不知何故想利用存在的索引,因为与表中的总行相比,不同ID的数量非常小。

我该怎么做?我尝试搜索,但无济于事

2 个答案:

答案 0 :(得分:1)

如果用例涉及每月或某个时间段的数据归档,则可以考虑更新DataBase表以使用分区。

假设您每月收集数据,并希望保留最近5个月的数据。根据一年中的月份在表上创建分区将非常有效。

这将

  • 优化您的READ查询(表扫描将减少为分区扫描)
  • 优化您的DELETE请求(只需删除整个分区)

答案 1 :(得分:0)

此查询需要date上的索引:

create index idx_mytable_date on mytable(date);

或者,您可以删除现有索引,并使用(date, id)添加一个新索引。 date必须是此查询的第一个关键字。