Baru-baru ini saya mempelajari keajaiban indeks, dan kinerja telah meningkat secara dramatis. Namun, dengan semua yang telah saya pelajari, saya tidak dapat menemukan jawaban untuk pertanyaan ini.
Indeks memang bagus, tetapi mengapa seseorang tidak bisa mengindeks semua bidang untuk membuat tabel sangat cepat? Saya yakin ada alasan bagus untuk tidak melakukan ini, tapi bagaimana dengan tiga bidang dalam tabel tiga puluh bidang? 10 dalam 30 bidang? Di mana seseorang harus menarik garis, dan mengapa?
Jawaban:
Indeks membutuhkan ruang di memori (RAM); Indeks yang terlalu banyak atau terlalu besar dan DB harus menukarnya ke dan dari disk. Mereka juga meningkatkan waktu penyisipan dan penghapusan (setiap indeks harus diperbarui untuk setiap bagian data yang dimasukkan / dihapus / diperbarui).
Anda tidak memiliki memori yang tak terbatas. Menjadikannya semua indeks sesuai dengan RAM = bagus.
Anda tidak memiliki waktu yang tidak terbatas. Mengindeks hanya kolom yang Anda butuhkan diindeks meminimalkan hit kinerja masukkan / hapus / perbarui.
sumber
Ingatlah bahwa setiap indeks harus diperbarui setiap kali baris diperbarui, disisipkan, atau dihapus. Jadi, semakin banyak indeks yang Anda miliki, semakin lambat kinerja yang Anda miliki untuk operasi tulis.
Selain itu, setiap indeks membutuhkan lebih banyak ruang disk dan ruang memori (saat dipanggil), sehingga berpotensi memperlambat operasi pembacaan juga (untuk tabel besar). Lihat ini
sumber
Anda harus menyeimbangkan kebutuhan CRUD. Menulis ke tabel menjadi lambat. Adapun di mana harus menggambar garis, itu tergantung pada bagaimana data diakses (penyortiran penyortiran, dll.).
sumber
Pengindeksan akan memakan lebih banyak ruang yang dialokasikan baik dari drive dan ram, tetapi juga banyak meningkatkan kinerja. Sayangnya ketika mencapai batas memori, sistem akan mengorbankan ruang drive dan mempertaruhkan kinerja. Praktisnya, Anda tidak boleh mengindeks bidang apa pun yang menurut Anda tidak terlibat dalam segala jenis algoritme penjelajahan data, baik penyisipan maupun penelusuran (klausa WHERE). Tetapi Anda harus melakukannya jika sebaliknya. Secara default Anda harus mengindeks semua bidang. Bidang yang harus Anda pertimbangkan untuk tidak diindeks adalah jika kueri hanya digunakan oleh moderator, kecuali jika mereka juga membutuhkan kecepatan
sumber
jawaban ini adalah pendapat pribadi saya berdasarkan saya menggunakan logika matematika saya untuk menjawab
pertanyaan kedua adalah tentang batas di mana harus berhenti, Pertama mari kita lakukan beberapa perhitungan matematis, misalkan kita memiliki baris N dengan bidang L dalam sebuah tabel jika kita mengindeks semua bidang kita akan mendapatkan tabel indeks baru L di mana setiap tabel akan mengurutkan dalam a Berarti cara data bidang indeks, sekilas jika tabel Anda adalah bobot W itu akan menjadi W * 2 (1 tera akan menjadi 2 tera) jika Anda memiliki 100 tabel besar (saya sudah mengerjakan proyek di mana nomor tabel itu Di sekitar meja 1800) Anda akan membuang 100 kali ruang ini (100 tera), ini jauh dari kata bijak.
Jika kita akan menerapkan indeks di semua tabel, kita harus berpikir tentang pembaruan indeks adalah salah satu pemicu pembaruan semua pembaruan indeks ini adalah pilih semua setara yang tidak diurutkan pada waktunya
dari sini saya simpulkan bahwa Anda dalam skenario ini bahwa jika Anda akan kehilangan waktu ini lebih baik kehilangannya di pilih atau diperbarui karena jika Anda akan memilih bidang yang tidak diindeks Anda tidak akan memicu pemilihan lain pada semua bidang yang tidak diindeks
apa yang akan diindeks?
foreign-keys: adalah suatu keharusan berdasarkan
primary-key: Saya belum yakin tentang itu mungkin jika seseorang membaca ini dapat membantu dalam kasus ini
bidang lain: jawaban alami pertama adalah setengah dari sisa fild mengapa: jika Anda harus mengindeks lebih banyak Anda tidak jauh dari jawaban terbaik jika Anda harus mengindeks lebih sedikit Anda juga tidak jauh karena kami tahu bahwa tidak ada indeks yang buruk dan semua terindeks juga buruk.
dari 3 poin ini saya dapat menyimpulkan bahwa jika kita memiliki bidang L yang terdiri dari kunci K, batasnya harus di suatu tempat dekat
((L-K)/2)+K
kurang lebih oleh L / 10jawaban ini berdasarkan logika dan nilai pribadi saya
sumber
Tidaklah baik untuk mengindeks semua kolom dalam tabel. Meskipun ini akan membuat tabel sangat cepat untuk dibaca, tetapi juga menjadi jauh lebih lambat untuk menulis. Menulis ke tabel yang memiliki setiap kolom terindeks akan melibatkan meletakkan catatan baru di tabel itu dan kemudian memasukkan informasi setiap kolom ke dalam tabel indeksnya sendiri.
sumber