Open2

なんでpostgresではUUIDで性能劣化を起こさないのか

cubecube

MySQLの場合はある程度理解できたように思う。
下記によるとランダムIDではキャッシュに追加するところのindexのページが乗る確率が低くなっていくからとあり、それは納得できた。
https://techblog.raccoon.ne.jp/archives/1627262796.html

ただPostgresではなぜ上記の現象が起こらないのかがわからない
MySQLはクラスタインデックスだから上記の現象が起こると説明されていたが、クラスタインデックスでなくても上記の現象が起こるように思うんだけど...

クラスタインデックスと非クラスタインデックスの違いはリーフページに実際の値が入っているか、ヒープテーブルへのRowIDが入っているかで、
Insertが起こった場合、結局クラスタインデックス、非クラスタインデックスに関わらずランダムIDが入るIndexのリーフページはキャッシュに乗りにくくなってくると思うんだけどなんで?

cubecube

walとか考えないとして疑問をまとめると、

・クラスタインデックス
INSERTの時にリーフページにデータを入れるため、適切な位置を調べなくてはいけない、そのためキャッシュに乗ってないと、適切な位置を調べる分遅い

・非クラスタインデックス
ヒープページに追記した後(これは速い)、そのあと結局インデックスを更新するためにインデックスの適切な位置を調べなくてはいけないんじゃないか?
インデックス更新部分はクラスタインデックスと同じことをやっているのでは?

ここがよくわからない