大型数据库表的 sql 优化器

标签 sql database performance oracle oracle10g

我有一个包含数百万行的表,我需要加入这些行才能进行选择。响应时间不太好,我该如何提高其响应速度?我尝试过向我选择的列添加索引,有没有可以用来优化 sql 的工具,或者如何诊断 sql 的瓶颈并改进它?任何建议将不胜感激。 我正在使用 oracle 服务器 10g 并使用 asp.net 作为我的客户端。 是否有任何其他类型的索引对具有数百万行的表有用?

最佳答案

您可能应该从 EXPLAIN PLAN 开始.

Use the EXPLAIN PLAN statement to determine the execution plan Oracle Database follows to execute a specified SQL statement. This statement inserts a row describing each step of the execution plan into a specified table. You can also issue the EXPLAIN PLAN statement as part of the SQL trace facility.

This statement also determines the cost of executing the statement. If any domain indexes are defined on the table, then user-defined CPU and I/O costs will also be inserted.

然后编辑你的问题,并发布 SQL 语句和 EXPLAIN PLAN 的输出。

稍后。 。 .

我不会在这个问题上为你提供太多帮助。 269 行,至少 29 个 SELECT、并行查询、远程数据库、外连接(旧式)等等。

我能给你的最好建议是

  • 从 EXPLAIN PLAN 获取更多信息,并且
  • 简化问题。

plan table比通常发布的列更多。 COST、CARDINALITY、BYTES 和 TIME 列可能有助于确定调整工作的优先级。

您在该查询中进行了 10 次全表扫描。 (查询计划中的“TABLE ACCESS FULL”。)这通常是一个不好的迹象;全表扫描通常需要相对较长的时间来运行。这并不总是一个坏兆头。对小表的完整扫描可能比索引扫描更快。

首先获取查询中 29 个 SELECT 语句中每一个的 EXPLAIN PLAN 输出。如果其中任何一个显示全表扫描,您可能可以使用 suitable indexes 来提高它们的性能。 (Oracle 支持多种不同类型的索引。不要忽视多列索引的机会。)无论如何,EXPLAIN PLAN 输出将帮助您识别 29 个 SELECT 中最慢的一个。

关于大型数据库表的 sql 优化器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7591354/

相关文章:

mysql - 如何存储不可变、唯一、有序的列表?

php - SQL Server 的插入忽略的替代方案

php - Symfony2 的 EkinoWordpressBundle 上的 WordPress 数据库配置?

mysql - 带有 GROUP_CONCAT 和空值的 SQL 命令

mysql - 数据库存储多个主键; sql 与 nosql

php - 人与人之间的相互关系

c++ - 使用 C++14 编译器而不是 C++11 进行编译时,性能会得到提升吗?

c# - 在数据库支持的 Web 应用程序中,对性能最重要的影响是什么?

c# - 快速更新的DataGridView

MySQL 查询返回无效行并且非常慢