SQL. Վատ ցուցանիշ ՝ չնայած ինդեքսին

Ես պարզապես բախվեցի 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 վայրկյանում հանգեցնում է ցանկալի արդյունքի:

Վերադառնալ