Perbandingan Indeks MySQL: Integer vs. DateTime
Walaupun perbincangan sebelum ini telah membandingkan jenis medan Cap Masa dan DateTime tanpa pengindeksan, pertanyaan ini memfokuskan secara khusus pada prestasi DateTime dengan indeks melawan int dengan indeks dalam jadual InnoDB dengan berjuta-juta rekod.
Dalam senario ini, pertanyaan dengan kriteria berdasarkan:
Penilaian Empirikal
Ujian awal menggunakan MySQL 5.1.41 dan 10 juta rekod menunjukkan kelebihan kelajuan yang luar biasa untuk int:
Query | DateTime with Index (sec) | int with Index (sec) |
---|---|---|
COUNT(*) | 120.27 | 25.02 |
BETWEEN | 8.41 | 1.56 |
Penjelasan
Kecekapan int dikaitkan dengan fakta bahawa indeks boleh dibandingkan secara langsung dengan kriteria pertanyaan, menghapuskan keperluan MySQL untuk menghuraikan dan menukar tarikh. Sebaliknya, DateTime memerlukan pemprosesan tambahan untuk mengekstrak dan membandingkan komponen tarikh dan masa.
Pertimbangan Tambahan
Ujian seterusnya dengan kedua-dua jenis medan yang disimpan dalam jadual yang sama menghasilkan yang serupa prestasi, mencadangkan bahawa MySQL boleh mengoptimumkan pertanyaan dengan mengiktiraf kesetaraan DateTime dan nilai int.
Kesimpulan
Berdasarkan keputusan ini, adalah disyorkan untuk menyimpan tarikh dan masa sebagai int (cap waktu UNIX) jika prestasi pertanyaan berasaskan indeks adalah diutamakan. Pengoptimuman ini boleh mengurangkan masa pelaksanaan pertanyaan dengan ketara, terutamanya dalam pangkalan data besar dengan kriteria berasaskan tarikh yang kerap.
Atas ialah kandungan terperinci Adakah Pengindeksan Integer Lebih Cepat Daripada Pengindeksan DateTime untuk Set Data Besar?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!