【问题标题】:Oracle SQL EXPLAIN PLAN - full table accessOracle SQL EXPLAIN PLAN - 全表访问
【发布时间】:2018-04-30 21:03:19
【问题描述】:

我有一个与 5 个表连接的查询,它在大约 0.2 秒内执行以从我的数据库中检索 36 条记录。下面附上解释计划的分析,你可以看到即使那些已经带有索引的表仍然存在全表访问。

如果有必要,是否需要对查询进行微调,如下所示?

SELECT 

  CASE WHEN DS.NAME = 'InteractiveCustomer' THEN 'NA' ELSE CUS.SOURCE_SYSTEM END AS SOURCE_SYSTEM, 
  OU.ORGUNIT_CODE AS ORGANIZATION_UNITS, 
  SUM(
    CASE WHEN WS.NAME = 'Pending Autoclosure' THEN 1 ELSE 0 END
  ) AS PENDING_AUTOCLOSURE, 
  SUM(
    CASE WHEN WS.NAME = 'New' THEN 1 ELSE 0 END
  ) AS NEW, 
  SUM(
    CASE WHEN WS.NAME = 'Under Investigation' THEN 1 ELSE 0 END
  ) AS UNDER_INVESTIGATION, 
  SUM(
    CASE WHEN WS.NAME = 'Escalated' THEN 1 ELSE 0 END
  ) AS ESCALATED, 
  SUM(
    CASE WHEN WS.NAME = 'Recommend True Positive' THEN 1 ELSE 0 END
  ) AS RECOMMEND_TRUE_POSITIVE, 
  SUM(
    CASE WHEN WS.NAME = 'Reopen Under Investigation' THEN 1 ELSE 0 END
  ) AS REOPEN_UNDER_INVESTIGATION 
FROM 
  WORKFLOW_STATUSES WS 
  JOIN WORKFLOW_WORKITEM WW ON WS.ID = WW.STATUS_ID 
  JOIN WLM_ALERT_HEADER WAH ON WW.ENTITY_KEY = WAH.ALERT_KEY 
  INNER JOIN ORGANIZATION_UNITS OU ON OU.ID = WAH.CUSTOMER_ORGUNIT_ID 
  LEFT JOIN CUSTOMERS CUS ON CUS.CUSTOMER_ID = WAH.CUSTOMER_ID 
  INNER JOIN DATA_SOURCE DS ON WAH.AT_DATASOURCE_ID = DS.ID 
WHERE 
  WW.ENTITY_NAME = 'WLM Alert' 
GROUP BY 
  OU.ORGUNIT_CODE, 
  CUS.SOURCE_SYSTEM, 
  DS.NAME;

【问题讨论】:

  • 我几乎看不懂解释计划,而且您从未在问题中包含您的查询。
  • 基数很小。要么你的数据太少,索引不重要,要么你的统计数据是错误的/过时的。
  • 更新了问题中的查询
  • 你可能是对的,数据库中只有 2604 条记录,分别对应 WS.NAME 和 WW.ENTITY_NAME。查询是列出这些记录的统计数据。
  • 运行一些查询以将相关表中的数据量放大一百万,然后再次运行它以测试其扩展方式。返回少量行的 0.2 秒不足以进行性能评估 - 0.19 秒可能是 tcp 连接设置、查询分析和重写以及通过网络进行数据分流

标签: sql oracle sql-execution-plan


【解决方案1】:

完整的表访问仍然可能发生在具有索引的表上,即使查询使用索引列,仅仅是因为查询优化器可能认为将整个表数据放入内存中比间接访问索引,寻找相关的行,然后从磁盘中取出它们

全表扫描不一定是坏事,但如果查询运行时间过长并且怀疑是由于对非常大的表进行 FTS,那么它可能是一个很好的起点。在小表上,完全扫描是微不足道的

您问是否有必要对查询进行微调——我个人对此的看法是“不,不在这个阶段”——根据我的评论,将相关数据表增加一百万行,然后再次运行它以了解它将如何扩展。你可能会得到一个完全不同的计划。即使它最终运行了 5 秒,也要将其与 prod 中要求此数据的次数进行平衡 - 如果它是每 10 秒一次,那么可以确定,做一些事情。如果是每月一次的客户团队发出发票,即使需要一分钟也不要费心

“过早的优化是万恶之源”

【讨论】:

    猜你喜欢
    • 2011-12-30
    • 2012-08-13
    • 1970-01-01
    • 2012-05-04
    • 2013-01-01
    • 2013-07-13
    • 1970-01-01
    • 2012-03-12
    • 1970-01-01
    相关资源
    最近更新 更多