Memiliki terlalu banyak tabel (misalnya 200) dalam satu contoh database Mysql dapat mengurangi kinerjanya?
Memiliki terlalu banyak tabel (misalnya 200) dalam satu contoh database Mysql dapat mengurangi kinerjanya?
Jawaban:
Secara umum, semakin banyak hal yang Anda miliki akan mengurangi kinerja. Namun, 200 sepertinya jumlah yang cukup kecil. 2.000 mungkin menjadi hit kinerja nyata dan pasti 20.000. Secara umum, Anda harus menjaga jumlah tabel Anda kecil karena MySQL dapat menangani jumlah baris yang sangat besar dalam tabel.
Jumlah tabel tidak terlalu penting:
Memiliki tabel berlebih berarti ruang memori & hard drive yang dapat diperoleh kembali & digunakan untuk hal-hal lain. Perlu diingat bahwa denormalisasi tabel Anda meningkatkan risiko data buruk karena Anda menghilangkan integritas referensi.
Secara umum 200 tabel seharusnya tidak menjadi masalah tetapi tergantung pada sejumlah hal.
Dedicated server MySQL vs Server dibagi dengan perangkat lunak lain, 128Mb vs 128Gb dll, tabel kecil dengan beberapa catatan vs tabel dengan gumpalan dan jutaan baris.
MySQL memiliki pengaturan dan beberapa mesin yang masing-masing memengaruhi kinerja tabel dengan cara yang berbeda.
MyISAM biasanya memiliki tiga file per tabel .frm, .MYD, .MYI
INNODB dalam mode normal memiliki .frm dengan semua data disimpan di file pusat
INNODB dalam satu file per mode tabel memiliki .frm, .idb
table_open_cache adalah jumlah tabel yang dapat dibuka sekaligus (Default 64). Ini mungkin harus lebih besar dari jumlah tabel dalam skema Anda karena ini terkait dengan berapa banyak koneksi yang meminta DB. 100 koneksi bergabung dengan 3 tabel bisa berarti Anda memiliki 300 tabel di-cache plus tabel sementara. Secara umum skema yang lebih kompleks atau koneksi semakin besar angkanya.
open-files-limit Saya cenderung untuk mengatur ini ke 4x table_open_cache yang harus murah hati daripada repot-repot mencari nilai yang tepat.
Batas pegangan file sistem operasi untuk pengguna mysql juga dapat menjadi masalah (di linux defaultnya sering kali 1024, ulimit -n untuk menunjukkan batas pengguna) ini dapat menyebabkan masalah dengan sejumlah besar tabel ketika kurang dari jumlah tersebut mysql membutuhkan. Ini harus setidaknya sama dengan batas file-terbuka.
Seperti halnya basis data apa pun, ada ratusan parameter penyetelan yang dapat Anda sesuaikan untuk mengoptimalkan basis data untuk skema khusus Anda. MySQL lebih buruk untuk ini daripada kebanyakan karena Anda dapat memasukkan mesin tambahan jika Anda ingin yaitu mesin cluster NDB.
http://dev.mysql.com/doc/refman/5.1/en/table-cache.html
Semoga ini bisa membantu
Untuk setiap indeks tabel MySQL memiliki indeks sendiri. Indeks membutuhkan memori untuk disimpan dan digunakan, dan ada batasan global untuk indeks. Ketika ada banyak tabel, indeks tidak semuanya berada dalam RAM, jadi mereka pergi ke disk, yang mempengaruhi kinerja secara langsung. Mencoba mengangkat ini dalam my.cnf
: key_buffer_size=256M
: ini adalah jumlah RAM menyisihkan untuk memegang informasi indeks.
Bisa kah? Tentu. Tetapi berapa banyak tergantung banyak pada aplikasi Anda dan pola aksesnya, dan jika Anda menggunakan myisam atau innodb, dan apakah innodb dalam mode file-per-tabel atau tidak, dan ukuran log innodb. Anda harus memberi kami detail lebih dari itu.
Tidak - Saya tidak berpikir jumlah tabel akan menjadi hambatan kinerja di sistem Anda. Bagaimanapun, mereka hanya file di sistem file Anda. Tidak ada yang aneh tentang memiliki ratusan tabel dalam database.
Jauh lebih mungkin adalah bahwa pertanyaan Anda tidak dioptimalkan dengan benar. Saya akan menyarankan menyalakan log-slow-queries
dan log-queries-not-using-indexes
. Saat Anda mengidentifikasi kueri lambat, gunakan explain
opsi untuk melihat rencana kueri untuk kueri ini untuk mengidentifikasi tempat di mana indeks hilang.
Lihat http://dev.mysql.com/doc/refman/5.0/id/slow-query-log.html untuk lebih jelasnya.