【问题标题】:Oracle primary key affecting indexesOracle 主键影响索引
【发布时间】:2014-03-24 09:27:13
【问题描述】:

昨晚我的索引工作得非常好,低 I/O 都是好东西。现在今天早上我向表添加了一个主键,性能下降了,优化器即使有提示也会忽略索引。有什么建议吗?谢谢你

架构结构..

      Product
      ID       PK
      Name     
      Price   

      Order_Line
      Order_ID    FK
      Product_ID  FK
      Qty

      Orders
      ID             PK
      O_Date date
      CustID  

查询...

      SELECT SUM(OL.QTY) FROM  PRODUCT P,ORDERS O, ORDER_LINE OL   
      WHERE
      P.NAME = 'APRICOT JAM'
      AND
      P.ID = OL.PRODUCT_ID
      AND
      O.O_DATE = '03-MAR-2014'
      AND
      OL.ORDER_ID= O.ID
      ;

它没有使用的索引是产品的复合索引(名称,ID),而不是它使用产品主键进行索引范围扫描谢谢!

【问题讨论】:

  • 请贴出表结构、索引和主键。还有您对表运行的查询。
  • 嗨,好的,现在就这样做!谢谢! :)
  • 产品表仅显示 ID 上的 PK - 实际上看起来不错。我不明白为什么你会在 ID / Name 上有一个复合键。
  • 在索引中,获取的总数约为 2000,但当我包含主键时,它上升到 195000。这会和统计有关吗?谢谢!
  • 请张贴前后执行计划。看起来它可能改变了加入顺序。您还没有说被忽略的索引是什么 - 在product.name 上?我猜它使用product作为驱动表,现在它切换到使用orders? (另外,您的 FK 是否已编入索引?)

标签: database performance oracle indexing


【解决方案1】:

产品表 身份PK 名称 INDEX01 价格

我会以这种方式组织您的表格。 您的查询将进行范围扫描,因为它将扫描表中的 P.NAME = 'APRICOT JAM' 子句。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-07
    • 1970-01-01
    • 2013-06-10
    • 2016-03-01
    • 1970-01-01
    • 2013-03-20
    • 1970-01-01
    相关资源
    最近更新 更多