SQL: kinerja yang buruk meskipun indeks

Saya baru saja dihadapkan pada masalah kinerja database SQL berikut: Dalam tabel SQL yang disebut "pengguna" dengan ~ 1.000.000 entri, penentuan jumlah pendaftaran hari ini membutuhkan waktu 28 detik yang tidak dapat diterima. 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 terindeks "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