Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Mysql:beberapa tabel atau satu tabel besar?

Jika Anda mematuhi Nol, Satu, atau Banyak prinsip, di mana tidak ada hal seperti itu, salah satunya, atau jumlah yang tidak terbatas, Anda akan selalu membuat tabel yang dinormalisasi dengan benar untuk melacak hal-hal seperti ini.

Misalnya, skema yang mungkin:

CREATE TABLE user_attributes (
  id INT PRIMARY KEY NOT NULL AUTO_INCREMENT,
  user_id INT NOT NULL,
  attribute_name VARCHAR(255) NOT NULL,
  attribute_value VARCHAR(255),
  UNIQUE INDEX index_user_attributes_name(user_id, attribute_name)
);

Ini adalah pola penyimpanan nilai kunci dasar di mana Anda dapat memiliki banyak atribut per pengguna.

Meskipun persyaratan penyimpanan untuk ini lebih tinggi daripada pengaturan kolom tetap dengan nama yang terus-menerus membuat frustrasi seperti attribute1 , biayanya cukup kecil di usia hard drive berukuran terabyte sehingga jarang menjadi masalah.

Umumnya Anda akan membuat satu tabel untuk data ini sampai waktu penyisipan menjadi masalah. Selama sisipan Anda cepat, saya tidak akan mengkhawatirkannya. Pada saat itu Anda ingin mempertimbangkan sharding strategi untuk membagi data ini menjadi beberapa tabel dengan skema yang sama, tetapi hanya jika diperlukan.

Saya membayangkan itu akan berada pada tahap ~10-50 juta baris, tetapi bisa lebih tinggi jika jumlah aktivitas penyisipan dalam tabel ini relatif rendah.

Jangan lupa bahwa cara terbaik untuk mengoptimalkan aktivitas membaca adalah dengan menggunakan cache:Kueri database tercepat adalah yang tidak Anda buat. Untuk hal semacam itu, Anda biasanya menggunakan sesuatu seperti memcached untuk menyimpan hasil pengambilan sebelumnya, dan Anda akan membatalkannya saat menulis.

Seperti biasa, tolok ukur skema yang diusulkan di produksi skala.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Koneksi hilang di kumpulan koneksi jdbc Tomcat

  2. Beberapa kueri MYSQL vs. Beberapa loop foreach php

  3. MySQL menyisipkan dari textarea ke beberapa baris

  4. Laravel 5.1 Migrasi dan Pembibitan Tidak dapat memotong tabel yang dirujuk dalam batasan kunci asing

  5. Tidak ada entitas Doctrine ORM yang dipetakan menurut konfigurasi saat ini