将时间戳字段更改为具有 1.2 亿条记录的表上的 postgres 中的日期 - Rails



我有 1.2 亿的表,表架构如下所述,

t.integer  "invoice_number",        default: -1
t.text     "url"
t.boolean  "image",           default: false
t.integer  "client_id"
t.integer  "team_id"
t.datetime "invoice_date"
t.datetime "created_at"
t.datetime "updated_at"
t.integer  "user_id"
t.integer  "count"

目前,我对urlclient_idteam_idinvoice_dateuser_id有独特的索引。任何基于此的查询都会花费更多时间。

如果我更改迄今为止的invoice_date类型,是否会提高查询的性能?

哪种迁移方式最安全?

如果没有对您的数据库和应用程序的透彻了解,没有人可以告诉您更改对性能有什么影响,即使我认为差异非常小。

我强烈建议您先创建数据库的副本,并测试最重要的查询和语句。您可以将性能与两个数据库中的EXPLAIN进行比较。

如果您有一般的性能问题,则还应使用EXPLAIN来识别此泄漏。与更改单个列的类型相比,创建索引、实例化视图、更好的统计信息等可能会获得更高的性能。

还应使用副本来测量迁移时间。大表上的ALTER TABLE语句可能需要很长时间。因此,您也可以估计可能的停机时间。

我不能肯定地说,但从timestamp更改为date不太可能带来巨大的性能改进。

很有可能您的查询应该得到改进,或者您缺少索引。

尝试找出哪些查询很慢并对其进行处理。

最新更新