SQL: dizine rağmen zayıf performans

Az önce bir SQL veritabanının aşağıdaki performans problemi ile karşılaştım: ~ 1.000.000 girişli “kullanıcılar” adlı bir SQL tablosunda, bugün kayıt sayısının belirlenmesi kabul edilemez bir 28 saniye sürdü. Kayıt süreleri, "oluşturuldu" sütununda "Ymd H: i: s" formatında kaydedildi.


Kullanılan sorgu

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

DATETIME biçiminin "oluşturulmuş" sütununda zaten bir dizin olmasına rağmen, bu yükleme süresine yol açtı

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

ayarlanmıştı. Düşük performansın nedeni DATE işlev çağrısıdır: Dizine alınmış sütun "oluşturulmuş" DATE işlevi tarafından gönderilir ve dizini etkisiz hale getirir. Sorgu İyileştiricisi yalnızca "oluşturulmuş" u bilir, ancak DATE sonucunu (oluşturulmuş) bilmez. Optimize edilmiş sorgu

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

0,4 saniyelik bir sürede istenen sonuca götürür.

Geri