最近,由于性能的问题把一些大数据量的表改为分区表(partition table)。在postgresql下这个过程也是很艰难的,参见我的另一篇文章。
本来这是一件利国利民的好事,谁料居然发生了没有料想到的事情。几天后有人发现对某个分区表的一个查询特别的慢。查看后发现数据量大概为500w-600w查询时间居然需要12s-13s。 这个不正常,分析后发现该sql中单单一个 select max(time_stamp) from **table; 的语句基本就耗费了11-12s。吼吼,这就更不正常了。查看查询分析的结果发现在所有分区的查询都是全表扫描(full table scan)。这不应该啊,因为字段time_stamp是联合主键之一啊怎么也应该是索引扫描啊(index scan),看来这就是查询性能低下的原因了。略过长时间的分析,未果。没辙了只好去postgrsql的maillist找答案,唉,果然给找到了,我擦。http://archives.postgresql.org/pgsql-performance/2011-02/msg00234.PHP