database - 如何在 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 分钟,但没有任何结果和回应。它仍在工作。存储这些数据集和运行效率查询的最佳方式是什么?如果我为每个数据集创建一个单独的表,这是一个好主意吗?
解决方案
你的 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';
推荐阅读
- clojure - 当输入是向量时,为什么clojure.core/rest会输出一个列表?
- batch-file - 我希望使用 cmd 在“系统变量”中设置 MAVEN_HOME -> 以管理员身份运行
- javascript - 在一个位置交叉淡入/淡出图像与其他图像留给它?
- c# - 如何根据条件比较单元格值更改数据网格单元格颜色?
- python - 为什么重新定义模块级变量会导致早期使用引发 UnboundLocalError?
- docker - 在 Centos 7.3 上安装 docker 时出现问题
- powerbi - 按类别显示单个类别的 DAX 总计
- python-3.x - 打包 Pythons 虚拟环境以使用单个 .exe 进行分发
- javascript - 我的代码在未来的操作中没有价值
- amazon-web-services - 在 Cloud Trail 上检测到存储桶的 S3 存储桶策略不正确