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

从db2到Oracle: 如何定义支持PK索引

askTom 2017-10-16
416

问题描述

嗨,

我们正在将数据库从db2迁移到Oracle。

在db2上,我们可以使用DSC列支持主键索引。假设:
-ColumnA ASC
-ColumnB DSC
-ColumnC ASC

如果您需要使用第一个1/2列进行一些范围扫描,这很有用。

由于AFAIK,在Oracle中,DSC列是基于功能的,我应该为主键索引定义DSC列吗?

还是我应该将它们定义为 “所有ASC”?

另外: 我们在其他索引上使用NLS_SORT来获得正确的西班牙语排序。我也应该在PK索引上使用NLS_SORT吗?或者也许我应该有2个索引: 一个 “所有asc”,另一个用于DSC和NLS_SORT?

非常感谢。
致以最良好的问候。


专家解答

可悲的是,你不能使用基于功能的索引来监管主键:

create table t (
  x int,
  y int,
  z int
);

create unique index pk on t (x, y desc, z);

alter table t add primary key (x, y, z) using index pk;

ORA-14196: Specified index cannot be used to enforce the constraint.


您可以创建两个索引。PK的常规 (唯一)。和基于函数的查询:

create unique index pk2 on t (x, y, z);

alter table t add primary key (x, y, z) using index pk2;


但我会避免这种情况,除非你从下降指数中获得真正的好处。

如果您有很多类似的索引,优化器可能会很难选择 “正确” 的索引。随着索引的下降,你所谈论的就是避免排序操作。我希望查询使用PK的前两列来定位只有几行。所以在大多数情况下,节省的钱会很小。

但当然,这只是我的猜测。测试你的数据,看看它是如何发挥作用的!
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论