SQL: słaba wydajność pomimo indeksu

Właśnie stanąłem przed następującym problemem z wydajnością bazy danych SQL: W tabeli SQL o nazwie „users” zawierającej ~ 1 000 000 wpisów określenie liczby dzisiejszych rejestracji zajęło niedopuszczalne 28 sekund. Czasy rejestracji zostały zapisane w formacie „Ymd H: i: s” w kolumnie „utworzono”.


Używane zapytanie

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

doprowadziło do tego czasu ładowania, mimo że w kolumnie „utworzony” w formacie DATETIME był już indeks

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

został ustawiony. Przyczyną słabej wydajności jest wywołanie funkcji DATE: „Utworzona” kolumna indeksowana jest wysyłana przez funkcję DATE i powoduje, że indeks jest nieskuteczny. Query Optimizer zna tylko „utworzone”, ale nie zna wyniku DATE (utworzono). Zoptymalizowane zapytanie

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

prowadzi do pożądanego rezultatu w czasie 0,4 sekundy.

Z powrotem