在 Postgres 中创建哪个索引?
Which index to create in Postgres?
我有一个 table:
row_id attr_id attr_val
180000001 100 test1
180000001 101 test2
180000001 102 test3
180000001 103 test4
180000001 104 test5
180000002 100 test6
180000002 101 test7
180000002 102 test8
180000002 103 test9
180000002 104 test10
它有超过 50 亿行,table 大小约为 1.4 TB。我一般运行如下查询:
select * from table1 where rec_id = 180000002;
和
select * from table1 where rec_id = 180000002 and va_id = 100;
考虑到 space 和我的用例,我应该在 Postgres 中应用什么类型的索引最有效?
对于这些查询,您需要以下索引:(rec_id, va_id)
.
你真的是指select *
吗?如果您能够将 select
子句中的列数减少到几列,那么您可能还想将它们添加到索引中。
例如,查询如下:
select col1, col2 from table1 where rec_id = 180000002 and va_id = 100;
有利于索引 (rec_id, va_id, col1, col2)
:这使得索引 覆盖 ,如果数据库仅通过查看索引就可以完全执行它。
我有一个 table:
row_id attr_id attr_val
180000001 100 test1
180000001 101 test2
180000001 102 test3
180000001 103 test4
180000001 104 test5
180000002 100 test6
180000002 101 test7
180000002 102 test8
180000002 103 test9
180000002 104 test10
它有超过 50 亿行,table 大小约为 1.4 TB。我一般运行如下查询:
select * from table1 where rec_id = 180000002;
和
select * from table1 where rec_id = 180000002 and va_id = 100;
考虑到 space 和我的用例,我应该在 Postgres 中应用什么类型的索引最有效?
对于这些查询,您需要以下索引:(rec_id, va_id)
.
你真的是指select *
吗?如果您能够将 select
子句中的列数减少到几列,那么您可能还想将它们添加到索引中。
例如,查询如下:
select col1, col2 from table1 where rec_id = 180000002 and va_id = 100;
有利于索引 (rec_id, va_id, col1, col2)
:这使得索引 覆盖 ,如果数据库仅通过查看索引就可以完全执行它。