小编典典

大型表的SQL优化器

sql

我的表有数百万行,我需要加入这些行才能进行选择。响应时间不是很好,如何改善响应?我尝试将索引添加到我选择的列中,是否可以使用某个工具来优化sql或如何诊断sql的瓶颈并加以改进?任何建议将不胜感激。我正在使用oracle服务器10g,并使用asp.net作为我的客户端。在具有数百万行的表上是否还有其他类型的索引有用吗?


阅读 181

收藏
2021-04-28

共1个答案

小编典典

您可能应该从EXPLAIN
PLAN
开始。

使用EXPLAIN
PLAN语句来确定Oracle数据库执行指定的SQL语句所遵循的执行计划。该语句将描述执行计划的每个步骤的行插入到指定的表中。您还可以发出EXPLAIN
PLAN语句作为SQL跟踪工具的一部分。

该语句还确定了执行该语句的成本。如果在表上定义了任何域索引,则还将插入用户定义的CPU和I / O成本。

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

之后 。 。。

对于该查询,我不会有太大帮助。269行,至少29个SELECT,并行查询,远程数据库,外部联接(旧样式)等等。

我能给你的最好的建议是

  • 从EXPLAIN PLAN获得更多信息,以及
  • 简化问题。

计划表具有比一般贴得更列。COST,CARDINALITY,BYTES和TIME列可能在确定调整工作的优先级时很有用。

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

首先获取查询中所有29条SELECT语句的EXPLAIN
PLAN输出。如果它们中的任何一个显示了全表扫描,则可以使用适当的索引来提高其性能。(Oracle支持许多不同类型的索引。不要忽略多列索引的机会。)无论如何,EXPLAIN
PLAN输出将帮助您确定29个SELECT语句中最慢的一个。

2021-04-28