Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 如何索引rails中已经创建的数据?_Postgresql - Fatal编程技术网

Postgresql 如何索引rails中已经创建的数据?

Postgresql 如何索引rails中已经创建的数据?,postgresql,Postgresql,我正在尝试索引已经创建的列,其中表中的数据超过500万。我的问题是,如果我在迁移时添加索引,那么已经创建的数据也会被索引吗?或者我是否需要重新索引创建的数据?如果需要,如何重新索引 这是我的迁移 add_index :data_prods, :date_field add_index :data_prods, :entity_id 多谢各位 编辑 我使用的是PostgreSQL dbms。添加索引的过程会重新索引整个表的内容。一个具有500万行的表可能需要一些时间,我建议在具有类似数据量的暂存

我正在尝试索引已经创建的列,其中表中的数据超过500万。我的问题是,如果我在迁移时添加索引,那么已经创建的数据也会被索引吗?或者我是否需要重新索引创建的数据?如果需要,如何重新索引

这是我的迁移

add_index :data_prods, :date_field
add_index :data_prods, :entity_id
多谢各位

编辑
我使用的是PostgreSQL dbms。

添加索引的过程会重新索引整个表的内容。一个具有500万行的表可能需要一些时间,我建议在具有类似数据量的暂存环境中进行测试,以了解此迁移需要多长时间,以及对应用程序的影响

回复:您对改进查询时间的评论

索引将使查询更快,其中索引列通常在where子句中引用。在您的情况下,任何按日期\字段或实体\ id筛选的查询都会更快,但其他查询不会得到改进。应该注意的是,每个查询只使用1个索引,如果大多数查询同时使用日期字段和实体id来过滤数据,那么最好使用复合索引。我想进一步阅读关于复合索引的文章。

您使用的是什么DBMS?我使用的是PostgreSQL。索引属于表,而不是表上的行。创建您的索引并感到高兴。这样可以使查询更快,对吗?由于数据太多,我遇到了加载问题。可以始终使用connection.execute并发创建索引,以帮助避免停机时间。虽然这会使创建索引的时间更长。@gdxn96所以复合索引对我来说可能更好,因为我在大多数查询中都使用了这种组合。@Int'lmanofcodingsummary您能否解释一下如何在不停机的情况下使用connetion.execute。@Amal,使用connection.execute您可以运行原始SQL命令。因此,在索引中,您可以使用btree column1在表名称上并发创建索引idx\u index\u name使用并发标志创建索引,这样可以防止表锁定。