Database 我应该在数据库的created_列上创建索引吗
也许这是一个愚蠢的问题,但在我的数据库模式中,我正在基于简单posts表进行基于时间的分析。 在postgresql的created_at列上创建索引是一个好主意,还是数据库已经在索引上创建了索引 在我的邮政桌上Database 我应该在数据库的created_列上创建索引吗,database,postgresql,indexing,Database,Postgresql,Indexing,也许这是一个愚蠢的问题,但在我的数据库模式中,我正在基于简单posts表进行基于时间的分析。 在postgresql的created_at列上创建索引是一个好主意,还是数据库已经在索引上创建了索引 在我的邮政桌上 | post_id | user_id| some_post_stuff... | created_at | |:--------:|:--------------:|:--------:|:--------------:| | 1| 1 | hello #world | 05
| 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 |
| tag_id| post_id| created_at |
|:--------:|:--------------:|:--------:|
| 1| 1| 05/05/2021 |
| 2| 2| 05/05/2021 |
在我的post_标签表中
| tag_id | tag | trended_at |
|:--------:|:--------------:|:--------:|
| 1 | world | 05/05/2021 |
| 2 | stackoverflow | 05/05/2021 |
| tag_id| post_id| created_at |
|:--------:|:--------------:|:--------:|
| 1| 1| 05/05/2021 |
| 2| 2| 05/05/2021 |
我写了一个函数来查找带有最流行标签的趋势帖子。所以每15分钟。数据库cron jobsnodejs客户端函数在post_标记上执行group by命令,然后找到趋势标记,然后选择post。我应该在post_tags.created_at上创建created_at索引吗?因为当我插入此表时,它会更新主键索引文件,但created_at对于这种情况很重要?
感谢您的帮助。除了主键之外,Postgres不会为您创建索引。如果你想索引一些东西,你需要自己添加它 你应该为一列建立索引吗?取决于您查询的方式。索引对于搜索和排序都很有用。如果没有索引,数据库可能需要搜索整个表或花费大量时间对结果进行排序 如果您的查询必须搜索大量行,并使用order by created_at对它们进行排序,或者在where子句中使用created_at,如where created_at介于“2015-01-01”和“2015-12-31 23:59:59”之间
如果查询返回的行数较少,则可能不必为在处创建的_编制索引。例如:从帖子中选择*,其中user_id=X order by created_at可能会使用user_id上的索引将行过滤到一个小集合。按“创建位置”对它们进行排序会很快,因此不需要索引。问题并包括表的CREATE语句和您要支持的一个或多个查询。创建位置和趋势位置是什么类型?此表的SELECT、UPDATE和/或DELETE语句在哪里?以及解释、分析、缓冲、详细这些语句的结果。在不知道查询和查询计划的情况下,我们只能猜测。只有知道查询以及查询的需要频率和速度,以及表数据的修改频率和速度,才能决定是否编制索引。