为啥在主表上查询很慢?
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”或“cluster”即可。
【讨论】:
以上是关于为啥在主表上查询很慢?的主要内容,如果未能解决你的问题,请参考以下文章
带有子查询的 CTE 查询在小型索引表上很慢;如何在 MySQL 上进行优化?