SQL: performancë e dobët pavarësisht indeksit

Sapo u përballa me problemin e mëposhtëm të performancës të një baze të të dhënave SQL: Në një tabelë SQL të quajtur “përdorues” me 1.000.000 ~ hyrje, përcaktimi i numrit të regjistrimeve sot zgjati një 28 sekonda të papranueshme. Koha e regjistrimeve u ruajt në formatin "Ymd H: i: s" në kolonën "krijuar".


Pyetja e përdorur

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

çoi në këtë kohë ngarkimi, megjithëse tashmë kishte një indeks në kolonën "krijuar" të formatit DATETIME

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

ishte vendosur. Arsyeja për performancën e dobët është thirrja e funksionit DATE: Kolona e indeksuar "krijuar" dërgohet nga funksioni DATE dhe e bën indeksin joefektiv. Query Optimizer di vetëm "të krijuar", por jo rezultatin e DATE (krijuar). Pyetja e optimizuar

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

çon në rezultatin e dëshiruar në një kohë prej 0.4 sekondash.

Mbrapa