暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 在自定义表上创建索引

askTom 2018-01-28
170

问题描述

嗨,汤姆,

我有以下查询

select a.order_number from  xxdm.XXARX_INV_SOURCE_TBL_28_jan1 a,XXARX_INV_CNV_TBL_28th_jan1 b
where a.trx_number = b.trx_number 
and a.customer_number_source = b.customer_number_source
and a.trx_number = :trx_number
and a.creation_date > sysdate-1;
复制


当我得到解释计划,我得到下面的信息,所以我的问题是如何决定我应该索引哪个列,以及如何创建索引 (单列或多列的索引)。

计划哈希值: 1823763723

 
---------------------------------------------------------------------------------------------------
| Id  | Operation          | Name                         | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |                              | 41378 |  2384K|  2431   (1)| 00:00:01 |
|*  1 |  HASH JOIN         |                              | 41378 |  2384K|  2431   (1)| 00:00:01 |
|*  2 |   TABLE ACCESS FULL| XXARX_INV_CNV_TBL_28TH_JAN1  | 31764 |   527K|  1641   (1)| 00:00:01 |
|*  3 |   TABLE ACCESS FULL| XXARX_INV_SOURCE_TBL_28_JAN1 | 41670 |  1709K|   789   (2)| 00:00:01 |
---------------------------------------------------------------------------------------------------
 
Predicate Information (identified by operation id):
---------------------------------------------------
 
   1 - access("A"."TRX_NUMBER"="B"."TRX_NUMBER" AND 
              "A"."CUSTOMER_NUMBER_SOURCE"="B"."CUSTOMER_NUMBER_SOURCE")
   2 - filter("B"."TRX_NUMBER" IS NOT NULL AND "B"."CUSTOMER_NUMBER_SOURCE" IS NOT NULL)
   3 - filter("A"."CREATION_DATE">SYSDATE@!-1 AND "A"."TRX_NUMBER" IS NOT NULL)
 
Note
-----
   - dynamic statistics used: dynamic sampling (level=2)
   - 1 Sql Plan Directive used for this statement
复制


问候

专家解答

这就是我要处理的方式。

当我看:

和a.trx_number = :trx_number
和a.creation_date> sysdate-1;

我会考虑的事情是 (只有 * 您 * 才能真正回答这些问题,因为我没有数据):

-我有多少个不同的trx_number值?这有助于我决定将此列放在索引中是否有任何真正的好处

-从列的名称来看,它们听起来像是固定的 (即,不会随着时间的推移而更新),因此索引可能只会影响insert,而不会影响后续更新。

-creation_date的数据分布是什么?* 所有 * 值是否超过sysdate-1?(因为表的名称表明它可能只是每日摘录)。多少百分比的行落入这个桶。

在 * 缺少 * 该信息的情况下,我无法真正给出明智的答案,但我倾向于尝试类似的方法:

在t上创建索引ix (trx_number,creation_date) 压缩1;
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论