首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在什么情况下,按主键选择会很慢?

在什么情况下,按主键选择会很慢?
EN

Stack Overflow用户
提问于 2010-07-29 00:36:01
回答 4查看 2.4K关注 0票数 9

追踪一个相当典型的EclipseLink/JPA应用程序中的一些DB性能问题。

我看到频繁的查询耗时25-100ms。这些是简单的查询,只是从主键等于某个值的表中选择所有列。他们不应该太慢。

我正在使用log_min_duration_statement查看postgres日志中的查询时间,因此这应该会消除任何网络或应用程序开销。

这个查询并不慢,但它经常被使用。

为什么按主键选择*会很慢?这是postgres特有的问题还是一般的DB问题?我怎么才能加快速度呢?总体而言?给postgres的?

来自pg日志的示例查询:

代码语言:javascript
代码运行次数:0
运行
复制
2010-07-28 08:19:08 PDT - LOG:  duration: 61.405 ms  statement: EXECUTE <unnamed>  [PREPARE:  SELECT coded_ele
ment_key, code_system, code_system_label, description, label, code, concept_key, alternate_code_key FROM coded
_element WHERE (coded_element_key = $1)]

表大约有350万行。

我还在这个查询上运行了EXPLAIN和EXPLAIN ANALYZE,它只做了一个索引扫描。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-07-29 00:44:28

Select *使您的数据库更难工作,通常情况下,这是一种糟糕的做法。在stackoverflow上有很多关于这方面的问题/答案。

你有没有试过用字段名替换*?

票数 4
EN

Stack Overflow用户

发布于 2010-07-29 00:41:50

你会遇到某种锁争用吗?在执行这些查询时,您采用的是哪种锁?

票数 2
EN

Stack Overflow用户

发布于 2010-07-29 00:42:41

嗯,我对postgres SQL了解不多,所以我将给你一个适用于MS SQL Server的提示。

MS SQL Server有“簇索引”的概念,它是数据在磁盘上的物理布局。在字段上使用它是很好的,因为你要寻找一个介于到值之间的范围(主要是日期字段)。如果您正在寻找一个确切值(如主键查找),则它没有太大用处。但是,有时会无意中将主键索引设置为聚集索引。这使得索引查找到表扫描中。

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

https://stackoverflow.com/questions/3355166

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档