I currently have this query:
SELECT
*
FROM
(`session`)
WHERE
(`session`.`isSale` = 0)
AND (`session`.`createDatetime` >= (NOW() - INTERVAL 3 WEEK))
AND (`session`.`sellerName` IS NOT NULL)
GROUP BY `session`.`id`
ORDER BY `session`.`id` DESC;
and I have the below indexes:
idx_createDatetime (`createDatetime` ASC)
idx_isSale (`isSale` ASC)
idx_sellerName (`sellerName` ASC)
idx_isSale_createDatetime_sellerName (`isSale` ASC, `createDatetime` ASC, `sellerName` ASC)
idx_createDatetime_isSale_sellerName (`createDatetime` ASC, `isSale` ASC, `sellerName` ASC)
idx_createDatetime_sellerName_isSale (`createDatetime` ASC, `sellerName` ASC, `isSale` ASC)
When using EXPLAIN before the query, to check it out, I'm finding that the index that's being used is idx_createDatetime
Is there a specific reason why MySQL is deciding to go with a basic index, when there are better indexes to use?