相关文章推荐
大鼻子的水龙头  ·  How to count the ...·  昨天    · 
温暖的水煮鱼  ·  DateTime.Year 屬性 ...·  2 月前    · 
悲伤的鸭蛋  ·  怎么在python中读取/home/vtu/ ...·  11 月前    · 
博学的山寨机  ·  将varchar列转换为日期的sql·  1 年前    · 
失落的炒饭  ·  dplyr-tibble转换数据框的行名与列 ...·  1 年前    · 
苦恼的闹钟  ·  2019全球智慧零售大会丨详细议程重磅发布!_行业·  1 年前    · 
Code  ›  在Postgres中加速慢速SELECT DISTINCT查询的解决方案开发者社区
select distinct
https://cloud.tencent.com/developer/ask/sof/81113
酷酷的火柴
8 月前
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
提问

问 在Postgres中加速慢速SELECT DISTINCT查询的解决方案

Stack Overflow用户
提问于 2011-07-06 23:16:11
EN

查询基本上是:

代码语言: javascript
复制
SELECT DISTINCT "my_table"."foo" from "my_table" WHERE...

我假装100%确定查询的 DISTINCT 部分是它运行缓慢的原因,为了避免混淆,我省略了查询的其余部分,因为我主要关心的是distinct部分的缓慢(distinct总是缓慢的来源)。

有问题的表有250万行数据。这里没有列出的目的需要 DISTINCT (因为我不想返回修改过的查询,如果可能的话,我只想返回有关在DBMS级更快地运行distinct查询的一般信息)。

我怎样才能让 DISTINCT 运行得更快(特别是使用postgres9)而不改变SQL (也就是,我不能改变这个SQL,但有权在DB级优化一些东西)?

3 86.9K 0 票数 37
EN
sql
database
postgresql
database-optimization

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-06 23:29:04

您的DISTINCT会导致它对输出行进行排序,以便查找重复项。如果将索引放在查询所选的列上,则数据库可能能够按索引顺序读出它们并保存排序步骤。这在很大程度上取决于查询的细节和所涉及的表--您所说的“知道问题出在DISTINCT”确实限制了可用答案的范围。

票数 28
EN

Stack Overflow用户

发布于 2011-07-06 23:25:54

通常,您可以通过使用 group by 绕过 distinct 来更快地运行此类查询:

代码语言: javascript
复制
select my_table.foo 
from my_table 
where [whatever where conditions you want]
group by foo;
票数 46
EN

Stack Overflow用户

发布于 2011-07-08 08:40:24

您可以尝试增加work_mem设置,具体取决于数据集的大小,这可能会导致将查询计划切换为散列聚合,后者通常会更快。

但在全局设置得太高之前,首先要仔细阅读它。您可以很容易地炸毁您的服务器,因为 max_connections 设置相当于这个数字的乘数。

这意味着,如果您设置了 work_mem = 128MB 并设置了 max_connections = 100 (默认值),那么您应该有超过12.8 of的内存。您实际上是在告诉服务器,它可以使用这些内存来执行查询(甚至不考虑Postgres或其他方面使用的任何其他内存)。

票数 7
EN
页面原文内容由 Stack Overflow 提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6598778

复制

Copyright © 2013 - 2024 Tencent Cloud.

All Rights Reserved. 腾讯云 版权所有

 
推荐文章
大鼻子的水龙头  ·  How to count the distinct number of source documents in Azure AI Search Index - Microsoft Q&A
昨天
温暖的水煮鱼  ·  DateTime.Year 屬性 (System) | Microsoft Learn
2 月前
悲伤的鸭蛋  ·  怎么在python中读取/home/vtu/zkt.json,并且提取json文件中的ip_ranges字典中的cidr字段 - CSDN文库
11 月前
博学的山寨机  ·  将varchar列转换为日期的sql
1 年前
失落的炒饭  ·  dplyr-tibble转换数据框的行名与列向量_r语言中rownames_to_column是什么意思-CSDN博客
1 年前
苦恼的闹钟  ·  2019全球智慧零售大会丨详细议程重磅发布!_行业
1 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号