慢查询性能postgresql
Slow query performance postgresql
我有一个包含两个表的数据库:corr1,corr1_2。这两个表各有两列:c1 和 c2,每列包含 100k 行数据。数据是从正态分布中提取的整数。数据高度相关:
- corr1.c1 的最小值为 353,最大值为 651 和 271 个唯一值
- corr1.c2 的最小值为 540,最大值为 852 和 266 个唯一值
- corr1_2.c1 的最小值为 452,最大值为 750 和 273 个唯一值
- corr1_2.c2 的最小值为 562,最大值为 849 和 265 个唯一值
问题是对于要求苛刻的查询,查询性能极慢。以下查询非常慢:
SELECT COUNT(*) FROM corr1, corr1_2 WHERE corr1.c1 > 500 AND corr1_2.c2 > 570;
我已经根据以下内容为表创建了索引:
CREATE INDEX corr1_c1_idx ON public.corr1 USING btree (c1)
CREATE INDEX corr1_c2_idx ON public.corr1 USING btree (c2)
CREATE INDEX corr1_2_c1_idx ON public.corr1_2 USING btree (c1)
CREATE INDEX corr1_2_c2_idx ON public.corr1_2 USING btree (c2)
有谁知道我可以如何提高性能,或者这对我的电脑要求太高了吗?
您没有编写联接条件,因此您正在获取交叉联接。
你没说什么是均值和标准差,但是好像这两个条件都不是很挑剔。所以你最终得到几乎 100000 乘以 100000 个结果行。
所以查询慢也就不足为奇了
我有一个包含两个表的数据库:corr1,corr1_2。这两个表各有两列:c1 和 c2,每列包含 100k 行数据。数据是从正态分布中提取的整数。数据高度相关:
- corr1.c1 的最小值为 353,最大值为 651 和 271 个唯一值
- corr1.c2 的最小值为 540,最大值为 852 和 266 个唯一值
- corr1_2.c1 的最小值为 452,最大值为 750 和 273 个唯一值
- corr1_2.c2 的最小值为 562,最大值为 849 和 265 个唯一值
问题是对于要求苛刻的查询,查询性能极慢。以下查询非常慢:
SELECT COUNT(*) FROM corr1, corr1_2 WHERE corr1.c1 > 500 AND corr1_2.c2 > 570;
我已经根据以下内容为表创建了索引:
CREATE INDEX corr1_c1_idx ON public.corr1 USING btree (c1)
CREATE INDEX corr1_c2_idx ON public.corr1 USING btree (c2)
CREATE INDEX corr1_2_c1_idx ON public.corr1_2 USING btree (c1)
CREATE INDEX corr1_2_c2_idx ON public.corr1_2 USING btree (c2)
有谁知道我可以如何提高性能,或者这对我的电脑要求太高了吗?
您没有编写联接条件,因此您正在获取交叉联接。
你没说什么是均值和标准差,但是好像这两个条件都不是很挑剔。所以你最终得到几乎 100000 乘以 100000 个结果行。
所以查询慢也就不足为奇了