Saat membuat tabel dari beberapa gabungan untuk digunakan dalam analisis, kapan lebih disukai menggunakan tampilan dibandingkan membuat tabel baru?
Salah satu alasan mengapa saya lebih suka menggunakan view adalah bahwa skema database telah dikembangkan oleh administrator kami dari dalam Ruby, dan saya tidak terbiasa dengan Ruby. Saya dapat meminta agar tabel dibuat, tetapi membutuhkan langkah tambahan dan saya ingin lebih banyak fleksibilitas saat mengembangkan / menguji bergabung baru.
Saya mulai menggunakan pandangan mengikuti jawaban untuk pertanyaan terkait pada SO ( Kapan menggunakan R, kapan harus menggunakan SQL ). Jawaban terpilih mulai "lakukan manipulasi data dalam SQL sampai data berada dalam satu tabel, dan kemudian lakukan sisanya di R."
Saya sudah mulai menggunakan tampilan, tetapi saya mengalami beberapa masalah dengan tampilan:
- pertanyaan jauh lebih lambat
- Tampilan tidak dibuang dari produksi ke cadangan basis data yang saya gunakan untuk analisis.
Apakah pandangan sesuai untuk penggunaan ini? Jika demikian, haruskah saya mengharapkan penalti kinerja? Apakah ada cara untuk mempercepat permintaan pada tampilan?
sumber
Jawaban:
Tampilan di MySQL ditangani menggunakan salah satu dari dua algoritma yang berbeda:
MERGE
atauTEMPTABLE
.MERGE
hanyalah perluasan permintaan dengan alias yang sesuai.TEMPTABLE
hanya seperti apa kedengarannya, tampilan menempatkan hasilnya ke tabel sementara sebelum menjalankan klausa WHERE, dan tidak ada indeks di atasnya.Opsi 'ketiga' adalah
UNDEFINED
, yang memberitahu MySQL untuk memilih algoritma yang sesuai. MySQL akan berusaha menggunakannyaMERGE
karena lebih efisien. Peringatan Utama:Saya berani menebak VIEWS Anda membutuhkan algoritma TEMPTABLE, menyebabkan masalah kinerja.
Berikut ini adalah posting blog yang sangat tua tentang kinerja tampilan di MySQL dan tampaknya tidak menjadi lebih baik.
Namun, mungkin ada sedikit cahaya di ujung terowongan tentang masalah tabel sementara ini yang tidak mengandung indeks (menyebabkan pemindaian tabel penuh). Dalam 5.6 :
Seperti yang ditunjukkan @ypercube, MariaDB 5.3 telah menambahkan optimisasi yang sama. Artikel ini memiliki ikhtisar proses yang menarik:
sumber
Fields of merge-able views and derived tables are involved now in all optimizations employing equalities
Tampilan adalah alat keamanan. Anda tidak ingin pengguna atau aplikasi tertentu tahu di mana tabel data Anda, Anda memberikan tampilan hanya dengan kolom yang dibutuhkan.
Ingat bahwa pandangan selalu menurunkan kinerja, pertanyaan serupa harus disimpan prosedur dan fungsi, bukan tampilan.
Untuk membuat penyetelan kueri, selalu ikuti praktik terbaik, hindari menggunakan fungsi dalam klausa WHERE, buat indeks untuk mempercepat pemilihan, tetapi jangan menyalahgunakannya indeks menurunkan sisipan, pembaruan, dan penghapusan.
Ada dokumentasi bagus yang dapat membantu Anda: http://www.toadworld.com/LinkClick.aspx?fileticket=3qbwCnzY/0A=&tabid=234
sumber
i think views adalah struktur yang sudah ditentukan sebelumnya (tidak ada data) untuk menggabungkan tabel menjadi satu untuk diatasi dari beberapa tabel query, yang dapat digunakan dari data nyata untuk ...
sumber