最佳使用索引进行聚合查询

时间:2014-05-05 20:02:47

标签: sql performance postgresql indexing

我的Postgres表看起来像这样:

tran_id SERIAL PRIMARY KEY,
acct_id int NOT NULL,
tran_type char(2) NOT NULL,
/* some performance irrelevant fields */

应用程序将运行的唯一多行查询如下:

SELECT acct_id, COUNT(tran_id) FROM table WHERE tran_type = 'X' GROUP BY acct_id;

因此,我总是只想提取具有特定交易类型的帐户列表,并获取该类型的交易数量。考虑到这一点,我最好的索引选择是什么:

  1. acct_id上的索引和tran_type
  2. 上的索引
  3. acct_idtran_type
  4. 上的综合索引
    1. 和2.合并(总共3个指数)
  5. 别的什么?

2 个答案:

答案 0 :(得分:1)

数字2.但是列的序列是必不可少的。成功:

CREATE INDEX tbl_mult_idx ON tbl (tran_type, acct_id)

此外,为该类型设置integer列(或enum)而不是char(2)会更有效。

如果定义count(*) count(tran_id),则使用tran_id代替NOT NULL。它快一点。

this related answer on dba.SE

中的更多详情

答案 1 :(得分:0)

建立你的号码2 :)。它只是一个索引 - 将更容易维护,它将完美地提供您的查询,甚至更多 - 它根本不会使用表,只是索引!

数字4下的

可以是物化视图