sql - 在什么情况下 SELECT by PRIMARY KEY 会很慢?

标签 sql database jpa performance eclipselink

在相当典型的 EclipseLink/JPA 应用程序中找出一些数据库性能问题。

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

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

这个查询并不慢,但是使用频率很高。

为什么通过主键选择*会很慢? 这是 postgres 特有的还是一般的数据库问题? 我怎样才能加快速度?一般来说?对于 postgres?

来自 pg 日志的示例查询:

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,它只进行索引扫描。

最佳答案

Select * 使您的数据库更加努力,并且作为一般规则,这是一种不好的做法。在 stackoverflow 上有大量的问题/答案都在谈论这个。

您是否尝试过用字段名称替换 *?

关于sql - 在什么情况下 SELECT by PRIMARY KEY 会很慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3355166/

相关文章:

php - 我如何从两个表中有一个公共(public)列的多个列中选择数据?

python - 不存在这样的表 : Customers

database - Virtuemart2 csv导入数据库不断崩溃

java - JPA中是否有查询类的参数化版本?

hibernate - 具有 OneToMany 层次结构的 Spring Batch Bulk Insert

java - OpenJpa 合并分离对象

c# - 无效的转换异常,没有重定向或警报

mysql - MySQL 中联接内的多个 When 情况

php - Laravel 5.3,似乎无法配置使用哪个数据库?

php - 从表中选择每个 user_id 不同的所有列