Setelah membaca Pertanyaan dan Jawaban dari situs web ini tentang indeks, sebuah pertanyaan muncul di benak saya.
Bagaimana jika, seseorang menggunakan tabel dimensi waktu dengan tingkat granularitas yang lebih rendah sebagai harinya. Di mana seseorang harus meletakkan indeks?
Randy Melder dalam pertanyaan: Apa artinya "indeks" pada RDBMS? berkata:
Pikirkan indeks sebagai "daftar isi" ... yang merupakan daftar petunjuk pointer ke posisi dalam file, alias offset
Dalam hal dimensi waktu, sebagian besar penelitian data dapat dilakukan baik untuk hari tertentu, minggu tertentu, bulan tertentu atau kuartal tertentu jika tabel waktu menyimpan sepanjang hari untuk tahun yang unik .
Pertanyaan saya adalah: Haruskah seseorang menaruh indeks untuk semua bidang itu?
Seharusnya hari itu unik, jadi untuk hari ini saya sangat memahami penggunaan indeks. Tetapi id seminggu akan memiliki 7 kejadian , id sebulan akan memiliki 30/31 kejadian , seperempat id akan memiliki lebih dari 120 kejadian .
- Haruskah seseorang masih meletakkan indeks untuk bidang-bidang itu?
- Apakah ini masih berguna?
Saya menanyakan itu kepada Anda karena dalam pertanyaan yang sama, David Spillett berkata:
Menambahkan terlalu banyak indeks tentu saja dapat menjadi optimasi yang buruk, karena ruang tambahan yang digunakan untuk menyimpan indeks (dan beban-IO untuk mempertahankannya jika DB Anda melihat banyak operasi penulisan) mungkin merupakan masalah yang lebih buruk daripada kueri baca yang sedikit kurang optimal , jadi jangan berlebihan.
Jadi, apa pertimbangan terbaik untuk kasus dimensi waktu?
sumber
Aturan umum adalah bahwa semakin selektif indeksnya (selektivitas didefinisikan sebagai jumlah nilai unik dalam kolom dibagi dengan jumlah baris dalam tabel), semakin besar kemungkinan mesin akan menggunakan indeks jika kueri menggunakan kolom di mana klausa.
Jika Anda mempertimbangkan untuk mengindeks kolom, menjalankan kueri memilih pada kolom yang diindeks sebelum dan sesudah dan melihat rencana eksekusi akan memberi tahu Anda jika indeks sedang digunakan, dan jika demikian, seberapa banyak indeks membantu. Idealnya, kueri yang Anda gunakan untuk tes adalah salah satu yang akan digunakan oleh aplikasi Anda.
sumber
Sejauh ini, aturan praktis saya adalah tidak menempatkan indeks apa pun ke dalam database pengembangan saya sama sekali saat saya sedang mengerjakannya. Ketika basis data produksi semakin besar, saya menggunakan pencatatan basis data dan
EXPLAIN
untuk mencari tahu apa yang perlu diindeks, dan kemudian hanya membuat indeks yang diperlukan. Ini berfungsi dengan baik selama penggunaan basis data meningkat secara bertahap, dan menjaga jumlah indeks tetap rendah.Saat menganalisis data dalam database, saya biasanya perlu menambahkan indeks tambahan untuk mempercepat permintaan yang tidak umum dalam produksi. Saya selalu melakukan ini pada salinan basis data produksi, jadi indeks ini tidak pernah ditambahkan ke produksi sendiri.
sumber