- "lastUpdatedOn" gibi hızla değişen sütuna dizin eklemek buna değer mi ?
- Tradeoff nasıl hesaplanır ?
- Birisi beni ne zaman ve nasıl resmi belgelere yönlendirebilir mi MySQL, satır eklerinde ve dizinlenmiş sütundaki güncellemelerde yeniden indeksleme yapar.
"Hızla değişen sütun" içeren bir dizine sahip olup olmamanız bir uzlaşmadır.
Bir UPDATE
dizindeki bir girdiyi silmeniz ve dizinin başka bir yerine yeni bir girdi eklemeniz gerekir.
Öte yandan, endeks nedeniyle endeks büyük ölçüde hızlanabilir.
Uzlaşmaları daha fazla tartışabilmemiz için lütfen somut bir örnek verin.
Düzenli olmayan-UNIQUE
dizinler (aksine FULLTEXT
ve SPATIAL
) böylece korunur :
Buffer_pool'da henüz diske yazılmamış dizin güncelleştirmelerini koruyan bir "arabelleği değiştir" (qv) vardır.
Ne zaman bir DELETE
oluşur, dizin girdisinin kaldırılması gerektiğini söylemek için Değişiklik Arabelleğine bir girdi eklenir.
İçin UPDATE
cb'ye iki giriş yapılması gerekebilir.
Ne zaman bir SELECT
böyle bir dizin kullanır, dizin için hem cb'yi hem de gerçek, disk üzerindeki Btree'yi kontrol eder. Bu BTree, buffer_pool'da önbelleğe alınır (blok blok). (Bir blok 16kb'dir ve yüzlerce girdi tutabilir.)
CB, "arka planda" veya "gerektiği gibi"diske boşaltılır. Bu, bir dizin bloğu getirmeyi (önceden önbelleğe alınmadıkça), bazı girdileri güncellemeyi (sil ve/veya ekle) ve diske geri yazmayı içerir. Hem okuma hem de yazma buffer_pool'da önbelleğe alınır, bu nedenle fiziksel bir G/Ç olabilir veya olmayabilir.
MySQL, belirli bir dizin dışında normal bir dizini ("reındex")" yeniden oluşturmaz" ALTERs
veya OPTIMIZE
. Yani, tüm değişiklikler anında yapılır. Cb'nin eylemi kullanıcı için şeffaftır.