Onları karşılaştıralım
BÖLÜM BOYUTU
Aşağıdakilere sahipseniz:
- Bir tabloda 100 milyon satır
- BTREE endeksleme
- BTREE'deki her Sayfada 1024 anahtar bulunur
Metrikler nasıl olurdu?
LOG (100000000) / LOG (2) = 26.575424759099 olduğundan, sayfa treenode başına 1024 anahtar içeren bir BTREE dizininin ağaç yüksekliği yalnızca 3'tür (CEILING (LOG (100000000) / LOG (1024))). Sadece üç sayfa düğümü ile, erişilen her treenode'da gerekli anahtar için ikili bir arama yaklaşık 30 tuşun budaması ve yalıtılmasıyla sonuçlanır.
BÖLME SAYISI
Aşağıdakilere sahipseniz:
- Bir tabloda 100 milyon satır
- BTREE endeksleme
- BTREE'deki her Sayfada 1024 anahtar bulunur
- 1024 paritition oluşturuyorsunuz
Sayılar biraz farklı olurdu.
Her bölümün yaklaşık 97656 satırı olmalıdır. Metrikler şimdi ne olacaktı?
LOG (97656) / LOG (2) = 16.575421065795 olduğundan, sayfa treenode başına 1024 anahtar içeren bir BTREE dizininin ağaç yüksekliği yalnızca 2'dir (CEILING (LOG (97656) / LOG (1024))). Sadece iki sayfa düğümü ile, erişilen her treenode'da gerekli anahtar için ikili bir arama yaklaşık 20 tuşun budaması ve yalıtılmasıyla sonuçlanır.
SONUÇ
Anahtarları yaymak yalnızca bir ağaç düzeyini kaldırır, ancak aslında 1024 dizin oluşturur. Sorgular farkı bilemez. Arama süresi muhtemelen en iyi şekilde bölümler lehine nominal olacaktır. Ancak, tüm verilerin etkin olduğundan emin olun. Aksi halde, nadiren erişilen verilere sahip diğer bölümler sadece yer kaplar ve bölümlemeyi haklı çıkaracak kadar sık erişilmez . Endişelenmek için farklı performans metriklerine sahip olabilirsiniz (XFS'de dahili birleştirme , ext3 ve ext4 vb. Gibi) Ayrıca hangi depolama motorunu kullandığınız konusunda da endişelenmeniz gerekir:
- Kümelenmiş bir dizini yönetmek zorunda kaldığı için InnoDB dizinleme, MyISAM ile karşılaştırıldığında biraz daha karışık olur
- InnoDB, geçerli günlük dosyasının yanı sıra ibdata1'deki verilerin iki kez yazılmasını sağlar (ib_logfile0 veya ib_logfile1)