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

时间:2012-08-19 07:58:56

标签: postgresql indexing database-performance

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

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

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

请建议我如何继续。

4 个答案:

答案 0 :(得分:42)

对于像这样的查询,partial index最适合您。

CREATE INDEX ON tbl (id) WHERE sync_done = FALSE

但是,对于这样的用例,可能更喜欢其他同步方法。

答案 1 :(得分:18)

我建议您索引表(布尔值是一个低基数字段),但是将其分配为布尔值。

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

答案 2 :(得分:2)

具有记录和布尔字段的表应该是这样做的。

以下是我认为可以帮助你的事情......

Bitmap Index

Alternative of Bitmap Index in PostgreSQL

答案 3 :(得分:1)

索引肯定会有所帮助,而不是轮询哪些可能会导致加载和并发问题,如果您的数据库被大量使用,可能值得考虑通知方法,如amqp或触发/基于数据库队列的方法,而不是像{ {3}}或Slony。 我已经使用Slony和Londiste进行基于触发器的复制,并且发现它们都非常出色。我更喜欢Londiste,因为设置和管理起来要简单得多(如果你有一个简单的用例坚持使用旧的2.分支)。