আপনি যদি চান একটি সূচক ব্যবহার করা হয় এবং কোয়েরিটি কোনও টেবিল স্ক্যান না করে:
WHERE timestamp >= CURDATE()
AND timestamp < CURDATE() + INTERVAL 1 DAY
প্রকৃত বাস্তবায়নের পরিকল্পনাগুলির মধ্যে পার্থক্যটি দেখানোর জন্য আমরা একটি এসকিউএল-ফিডল (একটি অত্যন্ত সহায়ক সাইট) দিয়ে পরীক্ষা করব :
CREATE TABLE test --- simple table
( id INT NOT NULL AUTO_INCREMENT
,`timestamp` datetime --- index timestamp
, data VARCHAR(100) NOT NULL
DEFAULT 'Sample data'
, PRIMARY KEY (id)
, INDEX t_IX (`timestamp`, id)
) ;
INSERT INTO test
(`timestamp`)
VALUES
('2013-02-08 00:01:12'),
--- --- insert about 7k rows
('2013-02-08 20:01:12') ;
এখন 2 সংস্করণ চেষ্টা করুন।
সংস্করণ 1 সহ DATE(timestamp) = ?
EXPLAIN
SELECT * FROM test
WHERE DATE(timestamp) = CURDATE() --- using DATE(timestamp)
ORDER BY timestamp ;
ব্যাখ্যা করা:
ID SELECT_TYPE TABLE TYPE POSSIBLE_KEYS KEY KEY_LEN REF
1 SIMPLE test ALL
ROWS FILTERED EXTRA
6671 100 Using where; Using filesort
এটি সমস্ত ( 676767১ ) সারি ফিল্টার করে এবং তারপরে একটি ফাইলসোর্ট করে (ফিরে আসা সারিগুলি কয়েকটি হওয়ায় এটি কোনও সমস্যা নয়)
সংস্করণ 2 সহ timestamp <= ? AND timestamp < ?
EXPLAIN
SELECT * FROM test
WHERE timestamp >= CURDATE()
AND timestamp < CURDATE() + INTERVAL 1 DAY
ORDER BY timestamp ;
ব্যাখ্যা করা:
ID SELECT_TYPE TABLE TYPE POSSIBLE_KEYS KEY KEY_LEN REF
1 SIMPLE test range t_IX t_IX 9
ROWS FILTERED EXTRA
2 100 Using where
এটি সূচীতে একটি ব্যাপ্তি স্ক্যান ব্যবহার করে এবং তারপরে টেবিল থেকে কেবল একই সারিগুলি পড়ে।