我正在尝试提高简单的更新查询速度,但是对于一行数据而言,耗时在0.7-1.5秒之间,速度太慢了。
UPDATE users SET firstname = 'test' WHERE userid=2120;
以下是解释:
Update on users (cost=0.43..8.45 rows=1 width=331) (actual time=0.068..0.068 rows=0 loops=1)
-> Index Scan using users_pkey on users (cost=0.43..8.45 rows=1 width=331) (actual time=0.039..0.040 rows=1 loops=1)
Index Cond: (userid = 2120)
Trigger updatemv: time=727.372 calls=1
Total runtime: 727.487 ms
数据库总大小为20GB,大约有60个表格。我在表格“用户”(users)上遇到了问题,它有136万行。表格“用户”具有36个列(4个bigint,5个整数,10个变长字符(从32到255),其他是布尔字段),其中许多行的一半为空。此外,“用户”表上有6个索引。该数据库托管在Amazon RDS db.m4.2xlarge上,配备8个vCPU、32 GB RAM和100 GB SSD。PostgresSQL版本为9.3。
我尝试使用VACUUM ANALYZE来优化表格,但仍然过慢。
我了解了升级RAM/CPU、在postgresql.conf中调整数据库、创建大型表格的分离表空间等方面。但我不确定如何最好地处理有百万行的大型表格。
根据当前趋势,我的表格将在未来12个月内增长到2000万行,因此我需要持久的解决方案。
如果有任何建议可以提高对大型表格上更新查询的速度,将会很有帮助。