性能调优:为布尔列创建索引

Pav*_*mar 28 postgresql indexing database-performance

我编写了一个守护进程处理器,它将从一个数据库中获取记录并将它们插入另一个数据库进行同步.它将根据每个记录指示标志获取记录,该标志是布尔数据类型.

我的表有数十万条记录.当我选择sync_done为false的记录时,是否会导致任何数据库性能问题?或者我应该为该sync_done列(布尔数据类型)应用索引,以提高性能,因为它将对sync_done值为false的记录应用select操作?

例如,假设我有10000条记录.其中,9500已经同步(sync_done为true),将仅选择记录的其余部分(sync_done为false).最终,9500条记录不会受到选择操作的影响.

请建议我如何继续.

Erw*_*ter 44

对于像这样的查询,部分索引最适合您.

CREATE INDEX ON tbl (id) WHERE sync_done = FALSE
Run Code Online (Sandbox Code Playgroud)

然而,对于这样的用例,其他同步方法可能是优选的.


Joh*_*ica 18

我建议您不要对表进行索引(布尔值是一个低基数字段),而是将其分配给布尔值.

请参阅:http://www.postgresql.org/docs/9.1/static/ddl-partitioning.html