一、背景
公司使用了一个第三方的pg数据库,最开始没有进行规划,后面发现数据量很大,导致查询很慢,需要进一步优化查询慢的场景,将原普通表改成分区表来提升查询效率,保留7天的分区数据
二、准备DDL
原表名为:mid_log_kyy,先创建一个新表
CREATETABLEdwd_ad.mid_log_kyy_new(app_sourceTEXT,osverTEXT,azemTEXT,odTEXT,wzTEXT,pigTEXT,mlTEXT,networkTEXT,carrierTEXT,tsTIMESTAMPWITHTIMEZONE,ttsTIMESTAMPWITHTIMEZONE,aidTEXT,app_idTEXT,)USINGhybridPARTITIONBYRANGE(tts)三、创建分区
示例:创建20260629的分区,其他时间按照以下修改创建即可
CREATETABLEdwd_ad.mid_ad_log_kyy_part_20260629PARTITIONOFdwd_ad.mid_ad_log_kyyFORVALUESFROM('2026-06-29 00:00:00')TO('2026-06-30 00:00:00');四、将原表数据导入新分区表
insertintomid_log_kyy_newselect*frommid_log_kyywheretts>='2026-06-29'andtts<'2026-06-30';五、验证新表数据
SELECTCOUNT(*)frommid_log_kyy_newWHEREtts>='2026-06-29 00:00:00'andtts<='2026-06-30 00:00:00'六、将表重命名
如果有数据写入建议暂停写入再进行重命名
altertablemid_log_kyyrenametomid_log_kyy_old;altertablemid_log_kyy_newrenametomid_log_kyy;七、验证数据
SELECTCOUNT(*)frommid_log_kyyWHEREtts>='2026-06-29 00:00:00'andtts<='2026-06-30 00:00:00'