我的表有数百万行,我需要加入这些行才能进行选择。响应时间不是很好,如何改善响应?我尝试将索引添加到我选择的列中,是否可以使用某个工具来优化sql或如何诊断sql的瓶颈并加以改进?任何建议将不胜感激。我正在使用oracle服务器10g,并使用asp.net作为我的客户端。在具有数百万行的表上是否还有其他类型的索引有用吗?
您可能应该从EXPLAIN PLAN开始。
使用EXPLAIN PLAN语句来确定Oracle数据库执行指定的SQL语句所遵循的执行计划。该语句将描述执行计划的每个步骤的行插入到指定的表中。您还可以发出EXPLAIN PLAN语句作为SQL跟踪工具的一部分。 该语句还确定了执行该语句的成本。如果在表上定义了任何域索引,则还将插入用户定义的CPU和I / O成本。
使用EXPLAIN PLAN语句来确定Oracle数据库执行指定的SQL语句所遵循的执行计划。该语句将描述执行计划的每个步骤的行插入到指定的表中。您还可以发出EXPLAIN PLAN语句作为SQL跟踪工具的一部分。
该语句还确定了执行该语句的成本。如果在表上定义了任何域索引,则还将插入用户定义的CPU和I / O成本。
然后编辑您的问题,并发布SQL语句和EXPLAIN PLAN的输出。
之后 。 。。
对于该查询,我不会有太大帮助。269行,至少29个SELECT,并行查询,远程数据库,外部联接(旧样式)等等。
我能给你的最好的建议是
该计划表具有比一般贴得更列。COST,CARDINALITY,BYTES和TIME列可能在确定调整工作的优先级时很有用。
您在该查询中进行了10次全表扫描。(查询计划中的“ TABLE ACCESS FULL”。)通常是一个不好的信号;全表扫描通常需要相对较长的时间才能运行。这并不 总是 一个坏兆头。对小型表的完整扫描可能比索引扫描更快。
首先获取查询中所有29条SELECT语句的EXPLAIN PLAN输出。如果它们中的任何一个显示了全表扫描,则可以使用适当的索引来提高其性能。(Oracle支持许多不同类型的索引。不要忽略多列索引的机会。)无论如何,EXPLAIN PLAN输出将帮助您确定29个SELECT语句中最慢的一个。