【发布时间】:2021-07-27 06:29:52
【问题描述】:
也许这是一个愚蠢的问题,但在我的数据库架构中,我正在基于对简单帖子表的分析按时间进行工作。 在 postgresql 上的 created_at 列上创建索引或已经在执行 created_at 索引的数据库上创建索引是个好主意吗?
在我的帖子表中
| post_id | user_id| some_post_stuff... | created_at |
|:--------:|:--------------:|:--------:|:--------------:|
| 1| 1 | hello #world | 05/05/2021 |
| 2| 1| #stackoverflow is best | 05/05/2021 |
在我的标签表中
| tag_id | tag | trended_at |
|:--------:|:--------------:|:--------:|
| 1 | world | 05/05/2021 |
| 2 | stackoverflow | 05/05/2021 |
在我的 post_tags 表中
| tag_id| post_id| created_at |
|:--------:|:--------------:|:--------:|
| 1| 1| 05/05/2021 |
| 2| 2| 05/05/2021 |
我编写了一个函数来查找带有最流行标签的趋势帖子。所以每15分钟一次。数据库 cron 作业(nodejs 客户端)功能在 post_tags 上按命令执行组,然后找到趋势标签,然后选择帖子。我是否应该在 post_tags.created_at 上创建 created_at 索引,因为当我插入此表时,它会更新主键索引文件,但 created_at 对于这种情况很重要? 感谢您的帮助。
【问题讨论】:
-
Edit 问题并包含表的
CREATE语句以及您要支持的一个或多个查询。 -
created_at和trended_at是什么类型? -
该表的 SELECT、UPDATE 和/或 DELETE 语句在哪里?以及这些语句的 EXPLAIN (ANALYZE, BUFFERS, VERBOSE) 的结果。在不知道您的查询和查询计划的情况下,我们只能猜测。
-
只有在您知道查询、需要它们的频率以及它们必须有多快,并且如果您知道表数据的修改频率和速度有多快的情况下,您才能决定是否建立索引必须是。
标签: database postgresql indexing