gpt4 book ai didi

oracle - 如果确实需要,是否可以在表上创建多个索引

转载 作者:行者123 更新时间:2023-12-05 00:30:51 24 4
gpt4 key购买 nike

我有一个有 7 列的表。

它将包含大量的数据 - 每个月将添加超过 170 万条记录。

在这 7 列中,第 5 列是我将在针对该表的查询的 WHERE 子句中以不同组合使用的列。

可以为这些可能的组合创建不同的索引吗?

我问这个问题是因为如果我这样做,这张表上将有 10 个以上的索引,我不确定这是否是个好主意。

另一方面,我害怕在没有索引的情况下查询具有如此大量数据的表。

这是表:

CREATE TABLE AG_PAYMENTS_TO_BE  
(
PAYMENTID NUMBER(15, 0) NOT NULL
, DEPARTID NUMBER(3,0)
, PENSIONERID NUMBER(11, 0) NOT NULL
, AMOUNT NUMBER(6, 2)
, PERIOD CHAR(6 CHAR)
, PAYMENTTYPE NUMBER(1,0)
, ST NUMBER(1, 0) DEFAULT 0
, CONSTRAINT AG_PAYMENTS_TO_BE_PK PRIMARY KEY
(
PAYMENTID
)
ENABLE
);

可能的查询:
  • SELECT AMOUNT FROM AG_PAYMENTS_TO_BE WHERE ST=0 AND DEPARTID=112 AND PERIOD='201207';
  • 从 AG_PAYMENTS_TO_BE 中选择金额 ST=0 AND PENSIONERID=123456 AND PERIOD='201207';
  • SELECT AMOUNT FROM AG_PAYMENTS_TO_BE WHERE ST=0 AND PENSIONERID=123456 AND PERIOD='201207' AND PAYMENTTYPE=1;
  • SELECT AMOUNT FROM AG_PAYMENTS_TO_BE WHERE ST=0 AND DEPARTID=112 AND ST=0;
  • 从 AG_PAYMENTS_TO_BE 中选择金额,其中 ST=0 且 PENSIONERID=123456;

  • 等等。

    最佳答案

    暂时忽略索引跳过扫描*,以便查询使用索引:

  • 前导索引列必须在查询
  • 中列出
  • 他们必须使用精确连接进行比较(即使用 = ,而不是 <>like )

  • 例如,在 (a, b) 上具有复合索引的表可以在以下查询中使用索引:
  • a = :b1 and b >= :b2
  • a = :b1

  • 但不是:
  • b = :b2

  • 因为专栏 b在索引中排名第二。 * 在某些情况下,可以通过 index skip scan 在这种情况下使用索引。 .这是跳过索引中的前导列的地方。然而,第一列需要相对较少的不同值,这并不经常发生(根据我的经验)。

    请注意,“更大”的索引可以由仅使用其中一些前导列的查询使用。所以在上面的例子中,索引只是 a是多余的,因为显示的查询可以使用 a, b 上的索引.仅 b 上的索引但是可能有用。

    添加的索引越多,插入/更新/删除的速度就越慢,因为索引必须与表同时维护。因此,您应该致力于减少索引的数量,除非添加新索引对查询有显着的好处。这是您必须在您的环境中进行衡量以确定确切的成本/ yield 的东西。

    请注意,具有相似列的多个索引可能会导致 wrong index being selected .因此,当您有许多相似的索引时,选择存在潜在的缺点。解析时间也有轻微的开销,因为 Oracle 在选择执行计划时有更多的选项需要考虑。

    查看您的查询,我相信您只需要索引:
  • st, departid, period
  • st, pensionerid, period

  • 您不妨添加 amount在这些末尾也是如此,因此您的查询可以从索引中得到完整的回答,从而为您节省了表查找。如果这些列是其他表的外键,您可能还需要更多索引, to prevent locking issues .

    关于oracle - 如果确实需要,是否可以在表上创建多个索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15764243/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com