哪个查询更有效? (PostgreSQL的)

我有一个表,该表将有很多记录(百万)。当“ .._ ups”值之一设置为0时,我需要检查该记录的所有其他“ ups”类型是否也均为0,然后将其删除。发生这种情况是因为用户可以取消其特定类型的“ ups”,但不能取消其他类型的“ ups”。如果他们取消每种类型的“上”,我想删除该记录。

time_unit字段是一个每5分钟更改一次的时间单位。因此,每个投票都记录了它所属的time_unit

仅搜索(删除)该时间单位的选票,或搜索(删除)(可能很大的)表中的所有选票,效率更高吗?我计划索引time_unit。我很难测试一下,因为我还没有记录。

查询1

DELETE FROM ups 
WHERE time_unit = $tuid AND big_ups = 0 AND sol_ups = 0 AND blue_ups = 0;

查询2

DELETE FROM ups 
WHERE big_ups = 0 AND sol_ups = 0 AND blue_ups = 0;
qpqp78952 回答:哪个查询更有效? (PostgreSQL的)

您的搜索条件很明确:

  

删除所有三个全为零的行。

您解释说,删除行时的时间范围并不重要。您只想摆脱符合上述条件的行。

然后,如果您碰巧具有正确的索引,则第二个查询是最佳查询。您需要的索引是:

create index ix1 on ups (big_ups,sol_ups,blue_ups);

使用该索引,删除应该很快,因为PostgreSQL在堆上执行逻辑删除,而不是物理删除。

,

使用第一个查询(在建立索引时使用time_unit=$tuid),数据库将仅直接转到该记录(仅),并检查其他列是否为零以进行删除。在第二个查询中,数据库必须通过所有记录(全表扫描),并查看它们在列中是否为零。

本文链接:https://www.f2er.com/3148059.html

大家都在问