Saya memiliki tabel MySQL InnoDB dengan 1.000.000 catatan. Apakah ini terlalu berlebihan? Atau database dapat menangani ini dan lainnya? Saya bertanya karena saya perhatikan bahwa beberapa kueri (misalnya, mendapatkan baris terakhir dari tabel) lebih lambat (detik) di tabel dengan 1 milon baris daripada di satu dengan 100.
sumber
Saya memiliki database dengan lebih dari 97.000.000 catatan ( file data 30GB ), dan tidak mengalami masalah.
Ingatlah untuk mendefinisikan dan meningkatkan indeks tabel Anda .
Jadi jelaslah bahwa 1.000.000 bukanlah BANYAK! (Tetapi jika Anda tidak mengindeks; ya, BANYAK)
sumber
Gunakan 'jelaskan' untuk memeriksa kueri Anda dan lihat apakah ada yang salah dengan rencana kueri.
sumber
EXPLAIN
- pemula atau tidak.EXPLAIN
;)Saya pikir ini adalah kesalahpahaman umum - ukuran hanya salah satu bagian dari persamaan dalam hal skalabilitas database. Ada masalah lain yang sulit (atau lebih sulit):
Berapa besar set kerja (yaitu berapa banyak data yang perlu dimuat ke dalam memori dan dikerjakan secara aktif). Jika Anda hanya memasukkan data dan kemudian tidak melakukan apa-apa dengannya, itu sebenarnya masalah yang mudah dipecahkan.
Tingkat konkurensi apa yang diperlukan? Apakah hanya ada satu pengguna yang menyisipkan / membaca, atau apakah kami memiliki ribuan klien yang beroperasi sekaligus?
Tingkat janji / ketahanan dan konsistensi kinerja apa yang dibutuhkan? Apakah kita harus memastikan bahwa kita dapat menghormati setiap komitmen. Bolehkah jika transaksi rata-rata cepat, atau apakah kita ingin memastikan bahwa semua transaksi cepat andal (kontrol kualitas enam sigma seperti - http://www.mysqlperformanceblog.com/2010/06/07/performance-optimization- dan-enam-sigma / ).
Apakah Anda perlu melakukan masalah operasional, seperti ALTER skema tabel? Dalam InnoDB hal ini dimungkinkan, tetapi sangat lambat karena sering kali harus membuat tabel sementara di latar depan (memblokir semua koneksi).
Jadi saya akan menyatakan dua masalah yang membatasi adalah:
sumber
Jika yang Anda maksud adalah 1 juta baris, itu bergantung pada bagaimana pengindeksan Anda dilakukan dan konfigurasi perangkat keras Anda. Satu juta baris bukanlah jumlah yang besar untuk database perusahaan, atau bahkan database developer pada peralatan yang layak.
jika yang Anda maksud 1 juta kolom (tidak yakin itu mungkin di MySQL) maka ya, ini tampaknya agak besar dan mungkin akan menimbulkan masalah.
sumber
Daftar? Apakah maksud Anda rekor?
Satu juta catatan bukanlah masalah besar untuk database saat ini. Jika Anda mengalami masalah apa pun, kemungkinan besar bukan sistem database itu sendiri, melainkan perangkat keras tempat Anda menjalankannya. Anda tidak akan mengalami masalah dengan DB sebelum Anda kehabisan perangkat keras, kemungkinan besar.
Sekarang, jelas beberapa kueri lebih lambat daripada yang lain, tetapi jika dua kueri yang sangat mirip berjalan dalam waktu yang sangat berbeda, Anda perlu mencari tahu apa rencana eksekusi database dan mengoptimalkannya, yaitu menggunakan indeks yang benar, normalisasi yang tepat, dll.
Secara kebetulan, tidak ada yang namanya record "terakhir" dalam tabel, dari sudut pandang logis mereka tidak memiliki urutan yang melekat.
sumber
SELECT LAST_INSERT_ID()
bukan kueri itu.Saya telah melihat tabel yang tidak dipartisi dengan beberapa miliar catatan (terindeks), yang bergabung sendiri untuk pekerjaan analitis. Kami akhirnya mempartisi hal itu tetapi jujur kami tidak melihat banyak perbedaan.
Konon, itu ada di Oracle dan saya belum menguji volume data itu di MySQL. Indeks adalah teman Anda :)
sumber
Dengan asumsi yang Anda maksud adalah "record" dengan "register" tidak, ini tidak terlalu banyak, MySQL berskala sangat baik dan dapat menyimpan record sebanyak yang Anda miliki di hard disk Anda.
Jelas meskipun permintaan pencarian akan lebih lambat. Tidak ada cara lain selain memastikan bahwa bidang diindeks dengan benar.
sumber
Semakin besar tabel (seperti semakin banyak baris di dalamnya), kueri yang lebih lambat biasanya akan berjalan jika tidak ada indeks. Setelah Anda menambahkan indeks yang tepat, kinerja kueri Anda akan meningkat atau setidaknya tidak menurun sebanyak tabel tumbuh. Namun, jika kueri itu sendiri mengembalikan lebih banyak baris saat tabel semakin besar, Anda akan mulai melihat degradasi lagi.
Meskipun baris 1M tidak terlalu banyak, itu juga tergantung pada berapa banyak memori yang Anda miliki di server DB. Jika tabel terlalu besar untuk di-cache dalam memori oleh server, maka kueri akan menjadi lebih lambat.
sumber
Menggunakan kueri yang disediakan akan sangat lambat karena menggunakan metode gabungan untuk mengurutkan data.
Saya akan merekomendasikan untuk memikirkan ulang desain sehingga Anda menggunakan indeks untuk mengambilnya atau memastikannya sudah dipesan dengan cara itu sehingga tidak diperlukan penyortiran.
sumber