我的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;
因此,我总是只想提取具有特定交易类型的帐户列表,并获取该类型的交易数量。考虑到这一点,我最好的索引选择是什么:
acct_id
上的索引和tran_type
acct_id
和tran_type
答案 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
。它快一点。
答案 1 :(得分:0)
建立你的号码2 :)。它只是一个索引 - 将更容易维护,它将完美地提供您的查询,甚至更多 - 它根本不会使用表,只是索引!
数字4下的可以是物化视图