Mari kita bandingkan mereka
UKURAN PARTISI
Jika Anda memiliki yang berikut:
- 100 juta baris dalam satu tabel
- Pengindeksan BTREE
- Setiap Halaman di BTREE memegang 1024 kunci
Akan seperti apa metrik itu?
Karena LOG (100000000) / LOG (2) = 26.575424759099, indeks BTREE dengan 1024 kunci per halaman treenode akan memiliki tinggi pohon hanya 3 (CEILING (LOG (100000000) / LOG (1024)))). Dengan hanya tiga halaman node, pencarian biner untuk kunci yang diperlukan di setiap treenode diakses akan menghasilkan pemangkasan dan isolasi sekitar 30 kunci.
JUMLAH PARTISI
Jika Anda memiliki yang berikut:
- 100 juta baris dalam satu tabel
- Pengindeksan BTREE
- Setiap Halaman di BTREE memegang 1024 kunci
- Anda membuat 1024 parititions
Jumlahnya akan sedikit berbeda.
Setiap partisi harus memiliki sekitar 97656 baris. Apa yang akan menjadi metrik sekarang?
Karena LOG (97656) / LOG (2) = 16.575421065795, indeks BTREE dengan 1024 kunci per halaman treenode akan memiliki tinggi pohon hanya 2 (CEILING (LOG (97656) / LOG (1024)))). Dengan hanya dua halaman node, pencarian biner untuk kunci yang diperlukan di setiap treenode diakses akan menghasilkan pemangkasan dan isolasi sekitar 20 kunci.
KESIMPULAN
Menyebarkan kunci hanya menghilangkan satu level pohon tetapi pada dasarnya menciptakan 1024 indeks. Pertanyaan tidak akan tahu bedanya. Waktu pencarian mungkin nominal paling baik untuk partisi. Namun, pastikan semua data aktif. Selain itu, Anda mungkin hanya memukul beberapa partisi, sedangkan partisi lain dengan data yang jarang diakses hanya menghabiskan ruang dan tidak pernah cukup sering diakses untuk membenarkan partisi . Anda mungkin memiliki metrik kinerja yang berbeda untuk khawatir tentang yang lebih terang-terangan (seperti defragmentasi internal di XFS , ext3 vs ext4, dll.) Anda juga perlu khawatir tentang mesin penyimpanan mana yang Anda gunakan karena:
- Pengindeksan InnoDB akan sedikit berantakan dibandingkan dengan MyISAM karena harus mengelola indeks berkerumun
- InnoDB melakukan penulisan ganda data dalam ibdata1 serta file log saat ini (ib_logfile0 atau ib_logfile1)