Oracle SQL EXPLAIN PLAN - 完全 table 访问权限

Oracle SQL EXPLAIN PLAN - full table access

我有一个连接了 5 table 秒的查询,它以大约 0.2 秒的运行时间执行,从我的数据库中检索了 36 条记录。下面附上解释计划的分析,你可以看到即使那些 table 已经带有索引,完整的 table 访问仍然发生。

是否有必要按如下方式微调查询?

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;

完全 table 访问仍可能发生在具有索引的 table 上,即使查询使用索引列只是因为查询优化器可能认为如果更快地 blat 整个 table 将数据存入内存,而不是间接访问索引,查找相关行,然后从磁盘中取出它们

全面 table 扫描不一定是坏事,但如果查询过长 运行ning 并且怀疑是由于 FTS一个非常大的table。在小tables 上,完整扫描是微不足道的

您询问是否有必要微调查询 - 我个人对此的看法是“不,现阶段不需要” - 根据我的评论,将相关数据 tables 提高一百万行,然后 运行 再次了解它将如何缩放。您可能会得到一个完全不同的计划。即使它最终 运行ning 持续了 5 秒,也要将其与产品中要求此数据的次数进行平衡——如果是每 10 秒,那么当然,请对此采取一些措施。如果是每个月一次,客户团队发出发票,即使需要一分钟也不要理会

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