SQL: kinerja yang buruk meskipun indeks

Saya baru saja dihadapkan dengan masalah kinerja database SQL berikut: Dalam tabel SQL yang disebut "pengguna" dengan ~ 1.000.000 entri, butuh waktu 28 detik yang tidak dapat diterima untuk menentukan jumlah pendaftaran hari ini. Waktu pendaftaran disimpan dalam format "Ymd H: i: s" di kolom "dibuat".


Kueri digunakan

SELECT COUNT(ID) FROM users WHERE DATE(created) = '2014-12-21';

menyebabkan waktu pemuatan ini, meskipun sudah ada indeks di kolom "dibuat" dalam format DATETIME

ALTER TABLE `users` ADD INDEX `created` (`created`);

telah diatur. Alasan untuk kinerja yang buruk adalah panggilan fungsi DATE: Kolom yang diindeks "dibuat" dikirim oleh fungsi DATE dan membuat indeks tidak efektif. Query Optimizer hanya mengetahui "dibuat", tetapi bukan hasil dari DATE (dibuat). Kueri yang dioptimalkan

SELECT COUNT(ID) FROM users WHERE created BETWEEN '2014-12-21' AND '2014-12-21 23:59:59';

mengarah ke hasil yang diinginkan dalam waktu 0,4 detik.

Kembali