Myślę, że dzieje się tak z powodu „gęstości” rekordów o tym samym kluczu na dysku. Myślę, że rekordy o tym samym identyfikatorze są przechowywane w gęstej (tj. kilku liczbie bloków), a te z tym samym łączem są przechowywane w rzadkim (tj. , rozłożone na ogromną liczbę bloków). Jeśli umieściłeś rekordy w kolejności id, taka sytuacja może się zdarzyć.
Załóżmy, że:1. jest 10 000 rekordów,2. są przechowywane w takiej kolejności, jak (id, link) =(1, 1), (1, 2),..., (1, 100), (2, 1)... i3. W jednym bloku można przechowywać 50 rekordów.
W powyższym założeniu blok #1~#3 składa się z rekordów (1,1)~(1,50), (1,51)~(1,100) i (2,1)~(2,50) odpowiednio.
Kiedy SELECT * FROM edges WHERE id=1
, tylko 2 bloki (#1, #2) mają zostać załadowane i zeskanowane. Z drugiej strony, SELECT * FROM edges WHERE link=1
wymaga 50 bloków (#1, #3, #5,...), mimo że liczba rzędów jest taka sama.