我有 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"
目前,我对url
、client_id
、team_id
、invoice_date
和user_id
有独特的索引。任何基于此的查询都会花费更多时间。
如果我更改迄今为止的invoice_date
类型,是否会提高查询的性能?
哪种迁移方式最安全?
如果没有对您的数据库和应用程序的透彻了解,没有人可以告诉您更改对性能有什么影响,即使我认为差异非常小。
我强烈建议您先创建数据库的副本,并测试最重要的查询和语句。您可以将性能与两个数据库中的EXPLAIN
进行比较。
如果您有一般的性能问题,则还应使用EXPLAIN
来识别此泄漏。与更改单个列的类型相比,创建索引、实例化视图、更好的统计信息等可能会获得更高的性能。
还应使用副本来测量迁移时间。大表上的ALTER TABLE
语句可能需要很长时间。因此,您也可以估计可能的停机时间。
我不能肯定地说,但从timestamp
更改为date
不太可能带来巨大的性能改进。
很有可能您的查询应该得到改进,或者您缺少索引。
尝试找出哪些查询很慢并对其进行处理。