首页 > 解决方案 > 如何在 Postgresql 中存储 300M 条记录以运行效率查询

问题描述

我有下表:

CREATE TABLE public.shop_prices
(
    shop_name text COLLATE pg_catalog."default",
    product text COLLATE pg_catalog."default",
    product_category text COLLATE pg_catalog."default",
    price text COLLATE pg_catalog."default"
)

对于这张表,我有一个 18 个月的数据集。在每个文件中大约有 15M 条记录。我必须进行一些分析,例如商店在哪个月份提高或降低了价格。我在表中导入了两个月并运行以下查询只是为了测试:

select shop, product from shop_prices group by shop, product limit 10

我等了超过 5 分钟,但没有任何结果和回应。它仍在工作。存储这些数据集和运行效率查询的最佳方式是什么?如果我为每个数据集创建一个单独的表,这是一个好主意吗?

标签: databasepostgresqldatabase-performance

解决方案


你的 PostgreSQL 版本是什么?首先有一个错字:列 shop 应该是 shop_name。其次,您的查询看起来很奇怪,因为它只有一个没有任何 ORDER BY 子句或 WHERE 子句的 LIMIT 子句:您真的想要这个查询的“随机”行吗?

您能否尝试发布 SQL 语句的 EXPLAIN 输出:

explain select shop_name, product from shop_prices group by shop_name, product limit 10;

您是否还可以检查是否已为此表计算了任何统计信息:

select * from pg_stats where tablename='shop_prices';

推荐阅读