我的主要问题是,在单个表中,WHERE
子句中未包含的记录数会影响SELECT
,INSERT
和UPDATE
的查询效果?
假设我有一个包含2000万行的表,并且该表有一个索引error
字符串列。
假设这些记录中有19,950,000条记录为此列设置了0
,而将50,000条记录设置为NULL
。
我的查询SELECT * FROM pending_emails WHERE error IS NULL
。
在我的应用程序中出现一些逻辑后,我需要按ID更新这些相同的记录以设置错误:
UPDATE "pending_emails" SET "error" = '0' WHERE "pending_emails"."id" = 46
UPDATE "pending_emails" SET "error" = '0' WHERE "pending_emails"."id" = 50
我试图确定是否可以离开'已完成'数据库中的记录不会影响我正在使用的活动记录的性能,或者我是否应该删除它们(不是首选)。
答案 0 :(得分:1)
通常没有。这就是索引的目的。您可能需要考虑此列的筛选索引:https://www.postgresql.org/docs/current/static/indexes-partial.html然后您的索引甚至根本没有索引“0”行。