Heim  >  Fragen und Antworten  >  Hauptteil

Warum speichert innodb Zeilenzeiger nicht in sekundären/nicht gruppierten Indizes?

Wie wir alle wissen, speichert innodb nur Primärschlüsselwerte im Sekundärindex, was bedeutet, dass wir den Clustered-Index-B+-Baum erneut durchlaufen müssen, um Zeilendatensätze zu erhalten.

Warum speichern Sie den Zeilenzeiger nicht direkt im Sekundärindex, um den zusätzlichen Suchaufwand zu reduzieren?

P粉038161873P粉038161873404 Tage vor551

Antworte allen(1)Ich werde antworten

  • P粉469090753

    P粉4690907532023-09-12 16:06:28

    没有“行指针”。 PRMARY KEY 的列具有在数据的 BTree 中定位行的功能。

    当然,通过 PK 查找可以说比“行指针”慢。但更新、删除、块分割等都会自动处理。 (参见 Bill 的评论。)这使代码更加简单。而且,在某些情况下,速度更快。

    更快的简单示例:Given

    PRIMARY KEY(id),
    INDEX(foo)   -- effectively (foo, id), as discussed above
    
    SELECT id FROM tbl WHERE foo = 123;

    在这个例子中,索引的BTree有完整的答案;无需访问数据的 BTree。因此,该索引被称为此 SELECT 的“覆盖”。

    Antwort
    0
  • StornierenAntwort