Apakah Anda Masih Perlu Pengindeksan Setelah Normalisasi Basis Data

14

Setelah Anda melakukan normalisasi yang baik, apakah Anda masih perlu mengindeks tabel? Bagaimana ini akan mempengaruhi kinerja? Apakah ini akan mempengaruhi kinerja setelah normalisasi yang baik?

Kolom mana yang biasanya diindeks jika Anda sudah memiliki kunci utama dan kunci asing?

Sepertinya sudah efektif untuk menormalkan database. Tapi, saya mungkin melewatkan bagaimana pengindeksan mempengaruhi database. Apakah ini hanya efektif ketika permintaan digunakan? Bagaimana cara kerjanya / berkinerja dan membuat database lebih baik?

Franz Noel
sumber
5
Kolom mana yang biasanya diindeks jika Anda sudah memiliki kunci utama dan kunci asing? Tanggal. Nama. Apa pun yang Anda butuhkan untuk mencari atau mengurutkan.
Carson63000
Indeks pada kunci utama tidak masuk hitungan?
CodesInChaos

Jawaban:

34

Iya. Bahkan, Anda mungkin perlu lebih memperhatikan indeks Anda. Normalisasi adalah tentang penyimpanan optimal . Itu sering bertentangan dengan kecepatan pengambilan , karena permintaan yang lebih kompleks dengan gabungan yang rumit digunakan. Terkadang orang yang memelihara basis data yang membutuhkan kecepatan pengambilan cepat akan mengalami de-normalisasi, atau mengatur data mereka dalam struktur yang sedikit lebih tidak dinormalisasi untuk mempermudah pengambilan.

GrandmasterB
sumber
21
Tujuan normalisasi bukanlah efisiensi penyimpanan, melainkan penghapusan ketergantungan penyisipan, pembaruan, dan penghapusan. Bacaan lebih lanjut
4
Saya setuju dengan @MichealT bahwa ini bukan soal efisiensi. Konsistensi logis adalah apa yang saya dapatkan dari tautan tersebut.
JeffO
Saya akan menghapus kata 'efisiensi' yang kontroversial (meskipun saya pikir pada dasarnya meringkaskan tujuan umum normalisasi) dan hanya menggunakan kata 'optimal' sebagai gantinya, meninggalkan apa artinya bagi pembaca. Tujuan aktualisasi sebenarnya tidak relevan dengan mengapa indeks masih diperlukan setelah database dinormalisasi.
GrandmasterB
56

Saya pikir Anda salah memahami apa yang dilakukan pengindeksan untuk kinerja database.

Indeks membantu menemukan basis data baris. Indeks adalah struktur data khusus yang, sebagai pengganti ruang disk tambahan dan beberapa kinerja saat memasukkan dan memperbarui, membantu mesin database pulang pada baris yang cocok.

Karena mereka membutuhkan ruang ekstra dan biaya (jumlah sedikit) kinerja agar tetap terbaru, Anda sebagai perancang basis data harus membuat indeks secara eksplisit agar sesuai dengan aplikasi dan pola kueri Anda.

Indeks bersifat ortogonal ke normalisasi basis data.

Martijn Pieters
sumber
4

Ya setelah normalisasi Anda masih perlu pengindeksan.

Tabel yang Anda manfaatkan sama dengan tabel yang Anda miliki sebelum normalisasi. Pada kenyataannya, mereka sendiri sama saja: tabel.

Satu hal yang harus Anda pertimbangkan, indeks membantu Anda menemukan jalan Anda melalui data lebih cepat. Normalisasi desain database selalu baik, tetapi kadang-kadang karena alasan kinerja Anda harus mendenormalisasi implementasi. Tapi itu hanya berdasarkan kasus per kasus.

Pieter B
sumber
2

Iya.

Indeks adalah metode untuk mempercepat pencarian data. Beberapa kueri adalah dengan kunci primer, yang biasanya secara implisit diindeks oleh mesin basis data, tetapi kueri lain cenderung menggunakan kolom lain. Seringkali beberapa kueri mencari berdasarkan kolom yang bahkan tidak unik dan dengan demikian tidak dapat menjadi kunci utama setelah normalisasi apa pun. Anda mungkin harus mengindeks kolom tersebut.

Hanya ada satu cara untuk mengetahui indeks mana yang harus dibuat. Ambil semua permintaan dalam aplikasi, temukan parameter contoh yang representatif untuk mereka dan minta mesin database menunjukkan rencana kueri mereka (semua mesin database memiliki EXPLAIN, EXPLAIN QUERY PLANatau perintah serupa; itu disebut berbeda di mesin yang berbeda) dan uji berapa lama waktu yang diperlukan. Daripada membuat indeks yang mempercepat yang lambat. Dan jangan lupa untuk menjatuhkan lagi indeks yang Anda coba tetapi tidak membantu untuk menghindari pemborosan sumber daya.

Jan Hudec
sumber
1

Indeks umumnya dibutuhkan di semua kecuali tabel terkecil. Cukup banyak setiap kunci asing harus diindeks dan hanya menyiapkan sebuah FK tidak berarti Anda memiliki indeks (setidaknya tidak dalam beberapa database, periksa dokumentasi db Anda). Bidang yang sering Anda ikuti atau gunakan di mana klausa harus diindeks jika mereka yang menguntungkan (Anda memerlukan sejumlah variasi data tertentu sehingga Boolean tidak mendapat manfaat misalnya) dan bidang yang memungkinkan untuk diindeks.

Namun, setiap indeks memperlambat sisipan \ pembaruan \ dihapus saat mempercepat pemilihan, jadi pilih indeks Anda dengan hati-hati.

Indeks sangat penting untuk kinerja yang dapat diterima dalam database.

HLGEM
sumber
0

Untuk bentuk normal ketiga Anda pasti akan membutuhkan indeks pada semua kunci utama.

Apakah Anda memerlukan indeks lain tergantung pada bagaimana database Anda digunakan. Misalnya jika Anda secara teratur mencari pelanggan dalam kode ZIP tertentu, maka, mungkin ide yang baik untuk mengindeks kolom zip_code di tabel pelanggan.

James Anderson
sumber