Saya sedang bekerja merancang database besar. Dalam aplikasi saya, saya akan memiliki banyak baris misalnya saat ini saya memiliki satu tabel dengan 4 juta catatan. Sebagian besar pertanyaan saya menggunakan klausa datetime untuk memilih data. Apakah ide yang baik untuk mengindeks bidang datetime di database mysql?
Select field1, field2,.....,field15
from table where field 20 between now() and now + 30 days
Saya mencoba untuk menjaga agar database saya berfungsi dengan baik dan pertanyaan berjalan dengan lancar
Selain itu, menurut Anda, ide apa yang harus saya buat untuk membuat database efisiensi tinggi?
field 20
?Jawaban:
MySQL merekomendasikan penggunaan indeks untuk berbagai alasan termasuk penghapusan baris antara kondisi: http://dev.mysql.com/doc/refman/5.0/id/mysql-indexes.html
Ini menjadikan kolom datetime Anda kandidat yang sangat baik untuk indeks jika Anda akan menggunakannya dalam kondisi yang sering dalam kueri. Jika satu-satunya kondisi
BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 30 DAY)
Anda dan Anda tidak memiliki indeks lain dalam kondisi tersebut, MySQL harus melakukan pemindaian tabel penuh pada setiap kueri. Saya tidak yakin berapa banyak baris yang dihasilkan dalam 30 hari, tetapi selama kurang dari 1/3 dari total baris akan lebih efisien untuk menggunakan indeks pada kolom.Pertanyaan Anda tentang membuat database yang efisien sangat luas. Saya akan mengatakan untuk memastikan bahwa itu dinormalisasi dan semua kolom yang sesuai diindeks (yaitu yang digunakan dalam bergabung dan di mana klausa).
sumber
SELECT
kueri lebih cepat meskipun saya mengindeksdate time
kolom. .. index membuat query dengan cepat ketika saya menggunakanequal
operasi .. Apakah saya benar?Di sini penulis melakukan tes menunjukkan bahwa timestamp unix integer lebih baik daripada DateTime. Catatan, dia menggunakan MySql. Tapi saya merasa tidak peduli mesin DB apa yang Anda gunakan membandingkan bilangan bulat sedikit lebih cepat daripada membandingkan tanggal sehingga indeks int lebih baik daripada indeks DateTime. Ambil T1 - waktu membandingkan 2 tanggal, T2 - waktu membandingkan 2 bilangan bulat. Pencarian di bidang yang diindeks membutuhkan waktu sekitar O (log (baris)) karena indeks berdasarkan pada pohon seimbang - mungkin berbeda untuk mesin DB yang berbeda tetapi bagaimanapun, Log (baris) adalah estimasi umum. (jika Anda tidak menggunakan indeks berbasis bitmask atau r-tree). Jadi perbedaannya adalah (T2-T1) * Log (baris) - dapat berperan jika Anda sering melakukan kueri.
sumber