【问题标题】:Slow query performance postgresqlpostgresql 查询性能慢
【发布时间】:2020-09-10 07:28:57
【问题描述】:

我有一个由两个表组成的数据库: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)

有没有人知道如何提高性能,或者这对我的计算机要求太高了?

【问题讨论】:

    标签: sql postgresql query-performance


    【解决方案1】:

    你没有写一个连接条件,所以你得到一个交叉连接。

    您没有说平均值和标准差是什么,但似乎这两个条件都不是很有选择性。所以你最终得到了将近 100000 乘以 100000 个结果行。

    所以查询慢也就不足为奇了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-06
      相关资源
      最近更新 更多