mas*_*nix 7 postgresql indexing performance
我有一些约有1700万行的表,每个表都有一个日期列,我希望能够经常利用它们进行搜索。我正在考虑只是在该列上添加索引,然后查看情况如何,或者按一次操作按日期对项目进行排序,然后将所有内容插入到新表中,以便主键随着日期的增加而上升。
由于这些都是非常耗时的,所以我认为值得在这里先征询意见。
最终目标是让我将sql查询加载到pandas中,以便在此处进行相关分析。
kli*_*lin 12
当您要在表中搜索给定日期时,日期列上的索引是有意义的,例如:
select * from test
where the_date = '2016-01-01';
-- or
select * from test
where the_date between '2016-01-01' and '2016-01-31';
-- etc
Run Code Online (Sandbox Code Playgroud)
在这些查询中,无论主键和日期列的排序顺序是否相同。因此,将数据重写到新表将毫无用处。只需创建一个索引。
但是,如果您打算仅在ORDER BY以下情况下使用索引:
select * from test
order by the_date;
Run Code Online (Sandbox Code Playgroud)
那么主键整数索引可能比日期列上的索引快得多(2-4 倍)。
Postgres支持某些扩展的聚集索引,这是通过删除和重新插入数据而建议的。
实际上,按照所需顺序删除和重新插入数据不会更改查询所花费的时间。Postgres不知道数据的顺序。
如果您知道该表的数据不会更改。然后根据您创建的索引对数据进行聚类。
此操作根据索引中的顺序对表进行重新排序。在更新表之前,它非常有效。语法为:
CLUSTER tableName USING IndexName;
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参见手册。
我也建议您使用
explain <query>;
Run Code Online (Sandbox Code Playgroud)
比较索引前后的两个查询。或在群集前后。
| 归档时间: |
|
| 查看次数: |
9519 次 |
| 最近记录: |