【问题标题】:what to consider before creating index?创建索引之前要考虑什么?
【发布时间】:2016-07-19 20:45:42
【问题描述】:

我有以下查询:

SELECT OEH.HEADER_ID, OEH.ORDER_NUMBER
                ,oel.line_number
                ,oel.pricing_quantity_uom as UOM
                ,oel.attribute1 as customer_length
                ,oel.attribute6 as theoretical_weight
FROM OE_ORDER_HEADERS_ALL OEH JOIN
     OE_ORDER_LINES_ALL OEL
     ON OEH.ORG_ID = OEL.ORG_ID AND
        OEH.HEADER_ID = OEL.HEADER_ID
WHERE OEL.LINK_TO_LINE_ID IS NULL;

我正面临嵌套循环并想调整此查询,我需要在哪些列上创建索引?

【问题讨论】:

  • 在您的问题中显示执行计划、表结构和当前索引会有所帮助。为什么你认为你需要一个索引?
  • @AlexPoole 这些是 oracle OM 表,只是我想要索引需要考虑哪些列,我有一个很长的查询,在这里发布不太好。只是想知道索引需要考虑哪些列。

标签: sql oracle join query-optimization


【解决方案1】:

一个方便的规则是索引JOINs 中使用的列:OE_ORDER_HEADERS_ALL(ORG_ID, HEADER_ID)OE_ORDER_LINES_ALL(ORG_ID, HEADER_ID)

事实上,对于JOIN,Oracle 可能只会使用其中一个,但它会选择更好的那个。

【讨论】:

  • 是否需要包含 select 子句中的列?
  • 这可以使查询稍微快一些。但是,因为无论如何您都可能读取整个表格,所以表格将被加载到页面缓存中,并且可能没有太大区别(通常)。
猜你喜欢
  • 2011-04-26
  • 1970-01-01
  • 2017-09-09
  • 1970-01-01
  • 2010-09-08
  • 2016-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多