我编写了一个守护进程处理器,将从一个数据库中获取行并插入到另一个数据库中进行同步。它将根据一个布尔标志sync_done
来获取行。
我的表有数十万行。当我选择所有sync_done为false
的行时,是否会导致任何数据库性能问题?由于只获取值为false
的sync_done
行,因此是否应该对该列应用索引以提高性能?
比如说,我有10000行数据。其中9500行已经同步完成(sync_done是true
)并且不会被选择。
请建议我如何继续操作。
我编写了一个守护进程处理器,将从一个数据库中获取行并插入到另一个数据库中进行同步。它将根据一个布尔标志sync_done
来获取行。
我的表有数十万行。当我选择所有sync_done为false
的行时,是否会导致任何数据库性能问题?由于只获取值为false
的sync_done
行,因此是否应该对该列应用索引以提高性能?
比如说,我有10000行数据。其中9500行已经同步完成(sync_done是true
)并且不会被选择。
请建议我如何继续操作。
对于这样的查询,一个仅覆盖未同步行的部分索引效果最好。
CREATE INDEX ON tbl (id) WHERE sync_done = FALSE;
然而,对于这种用例,其他同步方法可能更可取:
LISTEN
/ NOTIFY
。postgres_fdw
等外部数据包装器使用(最好)。我建议不要对表进行索引(因为布尔值是一个低基数字段),而是根据布尔值将其分区。
参见:http://www.postgresql.org/docs/9.1/static/ddl-partitioning.html