Saya akan berpikir bahwa basis data akan cukup tahu tentang apa yang sering mereka temui dan dapat menanggapi permintaan mereka di bawah bahwa mereka dapat memutuskan untuk menambahkan indeks ke data yang sangat diminta.
UNIQUE
kendala.
Saya akan berpikir bahwa basis data akan cukup tahu tentang apa yang sering mereka temui dan dapat menanggapi permintaan mereka di bawah bahwa mereka dapat memutuskan untuk menambahkan indeks ke data yang sangat diminta.
UNIQUE
kendala.
Jawaban:
Memperbarui
Ini sekarang diimplementasikan dalam SQL Server Azure. Ini menghasilkan rekomendasi
dan manajemen indeks dapat dikonfigurasi untuk menjadi otomatis .
Aktifkan manajemen indeks otomatis
Anda dapat mengatur Penasihat Database SQL untuk mengimplementasikan rekomendasi secara otomatis. Ketika rekomendasi tersedia, mereka akan secara otomatis diterapkan. Seperti semua operasi indeks yang dikelola oleh layanan jika dampak kinerja negatif, rekomendasi akan dikembalikan.
Jawaban Asli
Beberapa database sudah (semacam) membuat indeks secara otomatis.
Dalam SQL Server rencana eksekusi kadang-kadang dapat menyertakan operator Index Spool di mana RDBMS secara dinamis membuat salinan data yang diindeks. Namun kumparan ini bukan merupakan bagian yang tetap dari basis data yang selaras dengan data sumber dan tidak dapat dibagi antara eksekusi kueri, yang berarti eksekusi rencana tersebut dapat berulang kali membuat dan menjatuhkan indeks sementara pada data yang sama.
Mungkin di masa depan RDBMS akan memiliki kapasitas untuk secara dinamis turun dan membuat indeks persisten sesuai dengan beban kerja.
Proses optimasi indeks pada akhirnya hanyalah analisis biaya manfaat. Meskipun benar bahwa manusia mungkin memiliki lebih banyak informasi tentang kepentingan relatif dari pertanyaan dalam beban kerja pada prinsipnya, tidak ada alasan mengapa informasi ini tidak dapat disediakan untuk pengoptimal. SQL Server sudah memiliki gubernur sumber daya yang memungkinkan sesi diklasifikasikan ke dalam kelompok beban kerja yang berbeda dengan alokasi sumber daya yang berbeda sesuai dengan prioritas.
DMV indeks yang hilang yang disebutkan oleh Kenneth tidak dimaksudkan untuk diterapkan secara membabi buta karena mereka hanya mempertimbangkan manfaat dari permintaan tertentu dan tidak berupaya memperhitungkan biaya indeks potensial untuk pertanyaan lain. Juga tidak mengkonsolidasikan indeks hilang yang serupa. misalnya keluaran DMV ini dapat melaporkan indeks yang hilang pada A,B,C
danA,B INCLUDE(C)
Beberapa masalah saat ini dengan ide tersebut
Mungkin masuk akal untuk mengharapkan keakuratan model penetapan biaya untuk meningkat seiring waktu tetapi poin 2 terlihat lebih sulit untuk dipecahkan dan poin 3 secara inheren tidak dapat larut.
Namun demikian, mungkin sebagian besar pemasangan tidak berada dalam situasi ideal ini dengan staf terampil yang terus memantau, mendiagnosis, dan mengantisipasi (atau setidaknya bereaksi terhadap) perubahan beban kerja.
Proyek AutoAdmin di Microsoft Research telah berjalan sejak 1996
Tujuan dari proyek ini adalah untuk membuat database self-tuning dan mengatur diri sendiri dengan mengeksploitasi pengetahuan tentang beban kerja
Halaman muka proyek mencantumkan beberapa proyek menarik. Yang satu sangat relevan dengan pertanyaan di sini
Masalah lain yang menarik muncul ketika tidak ada DBA yang tersedia (misalnya database yang disematkan atau bisnis kecil). Dalam skenario seperti itu, pendekatan penyetelan indeks kontinu sentuhan rendah mungkin menjadi penting. Kami telah menjelajahi solusi ... [dalam] “ Pendekatan Online untuk Penyesuaian Desain Fisik ” di ICDE 2007.
Penulis menyatakan
Dengan fitur-fitur DBMS yang semakin umum seperti indeks online, menarik untuk mengeksplorasi lebih banyak solusi otomatis untuk masalah desain fisik yang memajukan keadaan terkini.
Makalah ini memperkenalkan algoritma
Karakteristik utamanya adalah:
- Saat kueri dioptimalkan, kami mengidentifikasi serangkaian indeks kandidat yang relevan yang akan meningkatkan kinerja. Fitur ini memungkinkan pemrosesan kueri untuk melanjutkan secara paralel dengan indeks yang dibangun di latar belakang.
- Pada waktu pelaksanaan, kami melacak potensi keuntungan yang kami rugi dengan tidak memiliki indeks kandidat tersebut dan juga kegunaan indeks yang ada di hadapan kueri, pembaruan, dan kendala ruang.
- Setelah kami mengumpulkan cukup "bukti" bahwa perubahan desain fisik menguntungkan, kami secara otomatis memicu kreasi atau penghapusan indeks.
- Sifat online dari masalah kita menyiratkan bahwa kita umumnya akan tertinggal di belakang solusi optimal yang mengetahui masa depan. Namun, dengan hati-hati mengukur bukti, kami memastikan bahwa kami tidak menderita dari keputusan "terlambat" secara signifikan, sehingga membatasi jumlah kerugian yang terjadi
Implementasi algoritma memungkinkan pelambatan dalam menanggapi perubahan beban server dan juga dapat membatalkan pembuatan indeks jika selama pembuatan perubahan beban kerja dan manfaat yang diharapkan berada di bawah titik yang dianggap berharga.
Kesimpulan dari penulis pada topik Online versus penyetelan fisik tradisional.
Algoritma online dalam pekerjaan ini berguna ketika DBA tidak yakin tentang perilaku beban kerja di masa depan, atau tidak memiliki kemungkinan melakukan analisis atau pemodelan yang komprehensif. Jika DBA memiliki informasi lengkap tentang karakteristik beban kerja, maka analisis statis dan penyebaran oleh alat yang ada (misalnya, [2, 3]) akan menjadi alternatif yang lebih baik.
Kesimpulan di sini mirip dengan yang ada di makalah lain Tuning Index-driven Autonomous Query-driven
Pendekatan kami tidak bisa mengalahkan penasihat indeks jika seluruh beban kerja diketahui sebelumnya. Namun, dalam lingkungan yang dinamis dengan perubahan dan perubahan beban kerja, pendekatan berbasis permintaan menghasilkan hasil yang lebih baik.
Desain indeks yang Anda tempatkan adalah sesuatu yang lebih dari seni daripada sains. RDBMS tidak cukup pintar untuk mengambil beban kerja umum dan merancang strategi pengindeksan cerdas. Terserah intervensi manusia (baca: DBA) untuk menganalisis beban kerja dan menentukan pendekatan apa yang terbaik.
Jika tidak ada penalti memiliki indeks maka itu akan menjadi pendekatan senapan untuk hanya menambahkan jumlah indeks yang tak terbatas. Tetapi karena modifikasi data (INSER, UPDAT, dan DELETES) memiliki dampak pada indeks yang diaktifkan pada tabel maka akan ada overhead variabel dari indeks ini.
Dibutuhkan desain dan strategi manusia untuk secara cerdas membuat indeks yang akan memaksimalkan kinerja membaca, sementara memiliki jumlah modifikasi data yang paling sedikit.
Bahkan, ada beberapa database yang melakukan ini. Misalnya, Google BigTable dan SimpleDB Amazon secara otomatis membuat indeks (meskipun RDBMS) . Ada juga setidaknya satu mesin RDBMS MySQL yang melakukan ini. SQL Server juga melacak indeks yang menurutnya harus Anda buat , meskipun tidak sejauh yang sebenarnya dibuat.
Masalahnya sangat sulit untuk diperbaiki, sehingga tidak heran bahwa sebagian besar database tidak secara otomatis membuatnya (BigTable / SimpleDB lolos begitu saja karena mereka tidak mengizinkan bergabung secara sewenang-wenang, yang membuat semuanya secara signifikan lebih mudah) . Selain itu, membuat indeks dengan cepat adalah proses yang memakan waktu yang membutuhkan akses eksklusif ke seluruh tabel - jelas bukan sesuatu yang Anda inginkan terjadi saat tabel online.
Namun, mengingat jumlah aplikasi web LAMP di luar sana yang ditulis oleh amatir yang bahkan tidak tahu apa yang indeks adalah , saya masih berpikir fitur ini akan bermanfaat bagi sebagian orang.
rdbms
dan saya tidak berpikir bahwa BigTable termasuk dalam kategori.
Meskipun sudah ada beberapa jawaban yang luas, mereka tampaknya mengitari jawaban yang sebenarnya: Indeks tidak selalu diinginkan.
Dengan analogi mobil yang disebutkan dalam komentar, Anda akan lebih baik mengatakan mengapa tidak semua mobil dilengkapi dengan paket olahraga ekstrim? Sebagian biayanya, tetapi juga karena banyak orang tidak membutuhkan atau menginginkan ban low profile dan suspensi keras; itu tidak perlu tidak nyaman.
Jadi mungkin Anda memiliki 1.000 bacaan untuk setiap sisipan, mengapa tidak memiliki indeks yang dibuat secara otomatis? Jika tabel luas dan kueri bervariasi, mengapa tidak memiliki beberapa? Mungkin komit adalah waktu kritis dan bacaan tidak; dalam keadaan itu mungkin tidak dapat diterima untuk memperlambat insert Anda. Mungkin Anda bekerja dengan ruang disk yang terbatas dan Anda tidak mampu memiliki indeks tambahan yang memakan ruang yang Anda punya.
Intinya, indeks tidak secara otomatis dibuat karena mereka bukan jawaban untuk segalanya. Merancang indeks bukan hanya sekedar perkataan "hei ini akan mempercepat bacaan saya", ada faktor lain yang perlu dipertimbangkan.
Mereka tidak pintar, mereka adalah sepotong kode. Setiap kali Anda memasukkan data baru ke basis data, ia perlu menemukan lokasi baru untuk itu dan peta untuk menemukannya saat diminta. Pengindeksan terdengar lebih mudah daripada itu, Anda hanya memberikan nomor baru ke sepotong data baru? Nah, bagaimana kalau kueri berikutnya bukan tentang potongan data terakhir tetapi sekitar 36.271 potongan sebelumnya? Anda dapat dengan mudah menemukannya dengan indeks Anda, bukan? Tetapi bagaimana jika kueri menyertakan kata seperti "memancing" yang dapat ditemukan di potongan 36271 tua yang dibuat pada tahun 1997? Ho? Tidak sepatah kata pun tentang memancing di artikel lama.
Jika data datang ke database satu per satu, itu bisa diindeks seperti itu. Tetapi pengindeksan sederhana akan membuat Anda salah hasil dan / atau memperlambat kinerja cepat atau lambat ...