小编Fed*_*oli的帖子

Postgres – 如何更改 postgres 索引的 WHERE 子句

我需要在一个包含大约 6 亿行的现有表上插入一个新的两字段索引。该表包含大约一年内积累的数据,每天大约添加 200 万行新行。

\n\n

我知道一次性向一个非常大的表添加新索引需要很长时间,因此为了节省时间,我首先使用以下命令仅对最后几天的数据建立索引\xe2\x80\xa6

\n\n
CREATE INDEX  idx_001\nON message (deviceNumber, messageTime)\nWHERE messageTime >='07-May-2018 00:00:00' ;\n
Run Code Online (Sandbox Code Playgroud)\n\n

一天索引大约需要 3 小时,即大约 40 分钟。

\n\n

理想情况下,我\xe2\x80\x99d 喜欢对整个表建立索引,但如果一天的数据需要 40 分钟,一次性完成将需要一周以上的时间。

\n\n

我想我可以创建很多小索引,每个索引用于几天的数据,也许像这样\xe2\x80\xa6

\n\n
CREATE INDEX  idx_002\nON message (deviceNumber, messageTime)\nWHERE messageTime <'07-May-2018 00:00:00' AND messageTime >='01-May-2018 00:00:00'  ;\n
Run Code Online (Sandbox Code Playgroud)\n\n

但我\xe2\x80\x99d 更喜欢坚持使用一个索引。有没有办法改变现有索引的 where 子句来增加覆盖天数?或者我必须创建很多小索引吗?

\n

postgresql performance index

3
推荐指数
1
解决办法
1093
查看次数

哪个更快:pg_catalog 或 information_schema?

pg_catalog我了解和之间的高级差异information_schema

但在许多情况下,工具可以选择使用其中任何一个。我想知道是否存在性能原因导致我们应该选择其中之一。其中之一的查询预计会更快吗?它们在锁方面的工作方式相同吗?

postgresql information-schema pg-catalog

3
推荐指数
1
解决办法
3897
查看次数

为什么向后扫描索引较慢?

实证测试表明,在 InnoDB 表上进行这样的查询:

SELECT indexed_column FROM tab ORDER BY indexes_column ASC;
Run Code Online (Sandbox Code Playgroud)

ORDER BY ... DESC. 为什么会这样?

注意:我使用 MySQL 5.7 和 5.6 进行了测试。所以这与 8.0 中的升序索引无关。

mysql innodb index

2
推荐指数
1
解决办法
1608
查看次数