gpt4 book ai didi

oracle - 未编入索引的外键导致 TM 入队争用

转载 作者:行者123 更新时间:2023-12-04 07:11:00 24 4
gpt4 key购买 nike

所以我们被告知 TM Enq 的一个来源争用可以是未编入索引的 FK。我的问题是哪一个。

我有一个 INSERT INTO Table_B正在录音 TM Enq Wait .

它包含一个 PK这是其他表的父表,它的列是 FK受限于其他 PK s。

那么哪个FK s 需要索引:该表的列或其子项?

注意:我知道这不是 TM 争用的唯一原因。如果是这种情况,你能解释为什么它不可能是这样。

最佳答案

不确定 Oracle TM 争用,但我会说通常外键关系的双方都被编入索引。否则,数据库将不得不进行表扫描。

  • 每当您插入新的子记录时,都会使用父记录上的索引来验证父记录是否存在。通常这也是一个主键,所以当然有一个索引。
  • 每当您更改或删除父记录时,都会使用子记录上的索引来执行级联(包括拒绝更新/删除)。

  • 两侧的索引也为数据库提供了进行快速(索引)连接的好机会,无论其优化器更喜欢来自哪一侧。

    编辑:有谷歌 TM 争用,听起来你可能错过了子记录上的键。但一定要确保两边都有它们,真的。

    编辑 2:回复评论,

    If you have a OLTP table that has 13 FKs to lookup tables, I'm not keen on 13 index updates in addition to the table, pk and any other indexes. An index is important but for specific reasons. If you never update the parent PK nor delete from the parent, the child index is not so useful. Or is it?



    然后取决于您正在运行的连接和查询。例如,如果你跑
    像这样的查询:
    SELECT o.something
    FROM oltp_tab o JOIN lookup l ON (o.lookup_no = l.lookup_no)
    WHERE l.lookup_name = ?

    那么查询优化器可能会喜欢子项上的索引
    记录。

    此外,根据 http://ashmasters.com/waits/enq-tm-contention/
    如果您在以下位置更改父表,则几乎需要有索引
    全部。显然,您可以从对
    父表和子表,除非你有索引。所以这大概是
    你所看到的(假设你没有做明显的事情,比如
    更新引用的列或删除行)

    关于oracle - 未编入索引的外键导致 TM 入队争用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/351375/

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