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

Apa cara yang baik untuk mendenormalisasi database mysql?

Saya tahu lebih banyak tentang mssql daripada mysql, tetapi saya tidak berpikir jumlah gabungan atau jumlah baris yang Anda bicarakan tidak akan menyebabkan Anda terlalu banyak masalah dengan indeks yang benar di tempat. Sudahkah Anda menganalisis rencana kueri untuk melihat apakah ada yang hilang?

http://dev.mysql.com/doc/refman/5.0 /en/explain.html

Karena itu, setelah Anda puas dengan indeks Anda dan telah menghabiskan semua jalan lain, de-normalisasi mungkin merupakan jawaban yang tepat. Jika Anda hanya memiliki satu atau dua kueri yang bermasalah, pendekatan manual mungkin tepat, sedangkan semacam alat pergudangan data mungkin lebih baik untuk membuat platform untuk mengembangkan kubus data.

Berikut adalah situs yang saya temukan yang menyentuh subjek:

http://www.meansandends.com /mysql-data-warehouse/?link_body%2Fbody=%7Bincl%3AAggregation%7D

Berikut adalah teknik sederhana yang dapat Anda gunakan untuk membuat kueri denormalisasi tetap sederhana, jika Anda hanya melakukan beberapa pada satu waktu (dan saya tidak mengganti tabel OLTP Anda, hanya membuat yang baru untuk tujuan pelaporan). Katakanlah Anda memiliki kueri ini di aplikasi Anda:

select a.name, b.address from tbla a 
join tblb b on b.fk_a_id = a.id where a.id=1

Anda dapat membuat tabel yang didenormalisasi dan diisi dengan kueri yang hampir sama:

create table tbl_ab (a_id, a_name, b_address); 
-- (types elided)

Perhatikan bahwa garis bawah cocok dengan alias tabel yang Anda gunakan

insert tbl_ab select a.id, a.name, b.address from tbla a
join tblb b on b.fk_a_id = a.id 
-- no where clause because you want everything

Kemudian untuk memperbaiki aplikasi Anda agar menggunakan tabel denormalisasi baru, alihkan titik untuk garis bawah.

select a_name as name, b_address as address 
from tbl_ab where a_id = 1;

Untuk kueri besar, ini dapat menghemat banyak waktu dan memperjelas dari mana data berasal, dan Anda dapat menggunakan kembali kueri yang sudah Anda miliki.

Ingat, saya hanya menganjurkan ini sebagai pilihan terakhir. Saya yakin ada beberapa indeks yang akan membantu Anda. Dan ketika Anda melakukan de-normalisasi, jangan lupa untuk memperhitungkan ruang ekstra pada disk Anda, dan cari tahu kapan Anda akan menjalankan kueri untuk mengisi tabel baru. Ini mungkin harus di malam hari, atau setiap kali aktivitas rendah. Dan data dalam tabel itu, tentu saja, tidak akan pernah benar-benar mutakhir.

[Sunting lagi] Jangan lupa bahwa tabel baru yang Anda buat perlu diindeks juga! Bagian baiknya adalah Anda dapat mengindeks sesuka hati Anda dan tidak khawatir tentang pertikaian kunci pembaruan, karena selain dari penyisipan massal Anda, tabel hanya akan melihat pilihan.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Di mana saya harus menyimpan kunci asing?

  2. Bagaimana cara membuat database MySQL berjalan sepenuhnya di memori?

  3. Facebook user_id :big_int, int atau string?

  4. php:SQLSTATE[HY000] [2002] Tidak ada koneksi yang dapat dibuat karena mesin target secara aktif menolaknya

  5. Cara Mengekspor &Mengimpor Pengguna yang Ada (dengan Hak Istimewanya!)