查询在数据库中花费了更多时间,尽管在连接条件中使用了索引列,那么我们可以在代码中做些啥来优化

Posted

技术标签:

【中文标题】查询在数据库中花费了更多时间,尽管在连接条件中使用了索引列,那么我们可以在代码中做些啥来优化【英文标题】:Query is taking more time in db, although used indexed columns in join conditions then what can we do in code to Optimize查询在数据库中花费了更多时间,尽管在连接条件中使用了索引列,那么我们可以在代码中做些什么来优化 【发布时间】:2014-06-29 18:00:15 【问题描述】:

如果即使在连接条件中使用索引列之后查询在 db 中花费的时间也更长,那么我们可以在代码中做些什么来最小化 Oracle 和 mysql 中的执行时间。

我每天都在从 Java 层执行 Oracle 查询。虽然我在数值列的索引列上使用条件查询。 我正在使用 Java Prepared Statement 并从 Java 执行。

【问题讨论】:

在 Mysql 中使用 EXPLAIN 或在 Oracle 中使用 EXPLAIN PLAN 来查看查询执行的详细信息。在那里你可以看到使用了哪些索引。您的问题很笼统,无法为您提供更好的建议。 【参考方案1】:

您要求我们诊断一些没有症状的东西。您应该提供 EXPLAIN PLAN 的输出(或设置自动跟踪)以及相关架构。

除了索引列之外,还有更多的调整。但在不知道的情况下,我假设您已经完成了所有可以做的优化,那么可能是时候使用表或物化视图进行预计算了。

其他选项包括固态磁盘或并行性(分区和/或并行查询)等等。

不确定您所说的“Java 层”是什么意思,我发现 Java 通常是 Oracle 性能的障碍。如果可能的话,对存储过程和日常工作坚持使用 PL/SQL。对于 Java 程序员来说,每个问题似乎都是 Java 问题。但就加速查询而言,Java 几乎没有带来任何好处。

【讨论】:

以上是关于查询在数据库中花费了更多时间,尽管在连接条件中使用了索引列,那么我们可以在代码中做些啥来优化的主要内容,如果未能解决你的问题,请参考以下文章

Postgres- pgsql 花费更多时间从超过 15 亿行的表中检索数据

为啥在 oracle SQL 中,在条件相差很大的情况下,对同一列执行具有两个不同值的查询所花费的时间

在 hadoop 中如何执行 hive 查询

是否应该在 SQLite 中使用 GROUP BY 在 UNION 上进行 INNER JOIN 花费数小时?

MySql 错误:1175(更新时没有带主键的位置),尽管我确实使用了 PK,并且在查询中没有进行连接

Oracle SQL 查询在 JdbcTemplate 和 SimpleJdbcTemplate 中花费的时间太长