SQL: индекске карабастан начар иштөө

Мен жөн гана SQL маалымат базасынын төмөнкү көйгөйлөрүнө туш болдум: ~ 1,000,000 жазуусу бар "колдонуучулар" деп аталган SQL таблицасында каттоолордун санын аныктоо 28 секундага созулган. Каттоо убактысы "түзүлгөн" тилкесинде "Ymd H: i: s" форматында сакталды.


Колдонулган суроо

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

DATETIME форматындагы "түзүлгөн" тилкеде буга чейин индекс болгонуна карабастан, бул жүктөө убактысына алып келди

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

коюлган болчу. Начар иштөөнүн себеби DATE функциясын чакыруу болуп саналат: "түзүлгөн" индекстелген тилке DATE функциясы тарабынан жөнөтүлөт жана индексти натыйжасыз кылат. Суроо оптимизатору "жаратылган" гана билет, бирок DATE (түзүлгөн) натыйжасын билбейт. Оптималдаштырылган суроо

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

0,4 секунддун ичинде каалаган натыйжага алып келет.

Артка