相关文章推荐
沉稳的麻辣香锅  ·  ALL、DISTINCT、DISTINCTR ...·  2 月前    · 
刚毅的莴苣  ·  CRLF和LF--团队开发难以排查的编码错误 ...·  8 月前    · 
小眼睛的椅子  ·  npm install 报错 npm ...·  1 年前    · 
求醉的水龙头  ·  网络驱动器,重启后无法连接 - ...·  1 年前    · 
踏实的墨镜  ·  Clear Private Data... ...·  1 年前    · 
Code  ›  在Postgres中加速慢速SELECT DISTINCT查询的解决方案开发者社区
select distinct
https://cloud.tencent.com/developer/ask/sof/81113
酷酷的火柴
7 月前
首页
学习
活动
专区
工具
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. 腾讯云 版权所有

 
推荐文章
沉稳的麻辣香锅  ·  ALL、DISTINCT、DISTINCTROW、top 谓词 (Microsoft Access SQL) | Microsoft Learn
2 月前
刚毅的莴苣  ·  CRLF和LF--团队开发难以排查的编码错误LF(Line Feed)代表“换行”,转义序列 \n,这个字符代表一行文本 - 掘金
8 月前
小眼睛的椅子  ·  npm install 报错 npm ERR! gyp verb check python checking for Python executable "python2.7.15" in the
1 年前
求醉的水龙头  ·  网络驱动器,重启后无法连接 - Microsoft Community
1 年前
踏实的墨镜  ·  Clear Private Data... (Add-Ons)首页、文档和下载 - FireFox插件 - OSCHINA - 中文开源技术交流社区
1 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号