【发布时间】:2015-09-12 16:56:24
【问题描述】:
我有一个我在本地创建的表,用于在大约 400 万行的数据集(最初是一个文本文件)上使用 PG 的一些窗口函数。每行对应一个客户订单。
CREATE TABLE orders
(
orderid integer,
customerid integer,
orderdate date,
status text,
amount money,
tax money,
customername text,
customerstate text
我的数据库在 i7 8gb RAM Windows 8 机器上本地运行。我在 orderid、customerid 和 orderdate 上有 btree 索引(索引?)。
当我运行以下查询时,需要 300 秒 (appx)。我希望通过一些基本的调整可以将它缩短到一分钟,但我不是 DBA。有人有提示吗?
select orderid, customername, orderdate,
rank() OVER (PARTITION BY customername ORDER BY orderdate ASC) as cust_ord_nbr
from orders
【问题讨论】:
-
当表中有 customerid 时,为什么要使用 customername 作为分区键?
-
@DanielVérité - 现在减少到 198 秒 :-)
-
有多少不同的客户?
-
@wildplasser - 330 万
-
在这种情况下,将客户规范化到一个单独的表中将无济于事(很多)唯一可能有帮助的就是(customerid,orderdate)上的复合索引
标签: postgresql postgresql-performance