为啥在主表上查询很慢?

Posted

技术标签:

【中文标题】为啥在主表上查询很慢?【英文标题】:why is it very slow to do query on master table?为什么在主表上查询很慢? 【发布时间】:2015-07-10 13:36:42 【问题描述】:

我有一张很大的桌子。所以我对这张表进行了分区。并将所有记录从主表复制到子表。然后我从主表中删除了所有记录。现在我的主表是空的。对子表进行查询非常快。但是在主表上查询仍然很慢。它有什么问题?

postgres=# select count(*) from only cdr;
 count 
-------
     0
(1 row)

postgres=# explain select count(*) from only cdr;
                              QUERY PLAN                               
-----------------------------------------------------------------------
 Aggregate  (cost=2045094.31..2045094.32 rows=1 width=0)
   ->  Seq Scan on cdr  (cost=0.00..2044867.85 rows=90585 width=0)
(2 rows)

postgres=# EXPLAIN ANALYZE select count(*) from only cdr;
                                                        QUERY PLAN                                                    

----------------------------------------------------------------------------------------------------------------------
-----
 Aggregate  (cost=2045094.31..2045094.32 rows=1 width=0) (actual time=168385.356..168385.356 rows=1 loops=1)
   ->  Seq Scan on cdr  (cost=0.00..2044867.85 rows=90585 width=0) (actual time=168385.351..168385.351 rows=0 loop
s=1)
 Total runtime: 168385.404 ms
(3 rows)

我还在主表上运行了真空分析。但仍然没有运气。

postgres=# 真空分析 cdr; 真空

我发现其他一些人也遇到了同样的问题。也许根本原因是,虽然master表中的旧记录已经被删除,但psql仍然以某种方式扫描这些垃圾数据。一种解决方案是创建一个新的主表,并放弃旧的主表。但是这个解决方案不适合我。没有停机时间的任何其他解决方案?谢谢!

【问题讨论】:

你在master上运行vacuum analyze了吗? 我已经运行了“vacuum analyze cdr;”。但是现在还是很慢。 【参考方案1】:

我解决了这个问题。只需要在主表上运行“vacuum full”或“c​​luster”即可。

【讨论】:

以上是关于为啥在主表上查询很慢?的主要内容,如果未能解决你的问题,请参考以下文章

MySQL查询在大表上很慢

带有子查询的 CTE 查询在小型索引表上很慢;如何在 MySQL 上进行优化?

在左连接表上使用 WHERE OR 时查询很慢?

查询或 dsum 中的 MS Access 性能 dlookup?

仅在主表上作为复合主键

在主表上的数据库触发器中将数据插入临时表