Using index on datetime field not working really Here is my query

select msisdn, sum(score) as score 
from contest_player_update_history_ideacontest6_35 
where request_date &gt;='2015-01-14 00:00:00' 
  and request_date &lt;= '2015-02-03 23:59:59' 
group by msisdn;

CREATE TABLE `contest_player_update_history_ideacontest6_35` (
  `id` bigint(10) NOT NULL AUTO_INCREMENT,
  `msisdn` varchar(15) DEFAULT '',
  `request_id` bigint(255) DEFAULT '0',
  `transaction_id` varchar(255) DEFAULT '',
  `contest_id` int(10) DEFAULT '0',
  `request_date` datetime DEFAULT NULL,
  `zone` varchar(255) DEFAULT '',
  `operator` varchar(255) DEFAULT '',
  `circle` varchar(255) DEFAULT '',
  `short_code` varchar(255) DEFAULT '',
  `channel` varchar(255) DEFAULT '',
  `language` varchar(255) DEFAULT '',
  `score` double(10,2) DEFAULT '0.00',
  `request_type` varchar(50) DEFAULT '',
  `request_value` varchar(255) DEFAULT '',
  `ans_type` varchar(255) DEFAULT '',
  `qusetion_id` varchar(255) DEFAULT '',
  `time_taken` double(10,2) DEFAULT '0.00',
  `billing_amount` double(10,2) DEFAULT '0.00',
  `billing_validity` int(10) DEFAULT '0',
  `operation` varchar(255) DEFAULT '',
  `param` varchar(255) DEFAULT '',
  `param1` varchar(255) DEFAULT '',
  `param2` varchar(255) DEFAULT '',
  `param3` varchar(255) DEFAULT '',
  `question_level` varchar(255) DEFAULT '',
  `max_allowed_question` int(10) DEFAULT '0',
  `allowed_question_per_day` int(10) DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `mdn` (`msisdn`),
  KEY `score` (`score`),
  KEY `request_date` (`request_date`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8


Explain gives me 

 1  SIMPLE       contest_player_update_history_ideacontest6_35  range   request_date   request_date  9        (NULL)  5365990  Using where


when date range is request_date >='2015-01-14 00:00:00' and request_date &lt;= '2015-02-03 23:59:59' Here key request_date key is being used.

and when I change the date range just includes another day 
request_date >='2015-01-14 00:00:00' and request_date &lt;= '2015-02-04 23:59:59', No key is being used and whole table is being traversed which causing delay in query. And data selection goes from 5 million to 20 million just adding 1 day since whole table is being traversed.

explain gives me result as 

1  SIMPLE       contest_player_update_history_ideacontest6_35  ALL     request_date   (NULL)  (NULL)   (NULL)  27221681  Using where; Using temporary; Using filesort
Using an index involves back-and-forth between the index BTree and the data BTree. So, if more than something like 20% of the table needs to be looked at, it is faster to simply scan the data (ignoring the index) and filter out those that fail the WHERE clause.