用于大型Db表的sql优化器

Nat*_*apa 2 sql database oracle performance oracle10g

我有桌子,有数百万行,我需要加入做选择.响应时间不太好,我怎样才能改善其响应?我已经尝试添加索引到我选择的列,是否有一个工具,我可以用来优化SQL或如何诊断SQL的瓶颈并改善它?任何建议将非常感激.我正在使用oracle服务器10g并使用asp.net作为我的客户端.是否有任何其他类型的索引有助于具有数百万行的表?

Mik*_*ll' 5

你应该从EXPLAIN PLAN开始.

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

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

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

后来...

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

我能给你的最好建议是

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

计划表具有比一般贴得更列.COST,CARDINALITY,BYTES和TIME列可能有助于确定调整工作的优先级.

您在该查询中有10个全表扫描.(查询计划中的"表访问已满".)这通常是一个不好的迹象; 全表扫描通常需要相对较长的时间才能运行.这并不总是一个坏兆头.对小型表的完全扫描可能比索引扫描更快.

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