【发布时间】: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