Ես պարզապես բախվեցի SQL տվյալների շտեմարանի կատարման հետևյալ խնդրին. SQL աղյուսակում, որը կոչվում է «օգտվողներ», ~ 1 000 000 գրառում, գրանցումների քանակի որոշումն այսօր անընդունելի 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 վայրկյանում հանգեցնում է ցանկալի արդյունքի: