У меня есть таблица MySql и запрос, который я пытаюсь оптимизировать, и у меня есть несколько вопросов.
SELECT value FROM table WHERE userid=?userid AND date <= ?date AND deleted='False' ORDER BY date DESC LIMIT 1
Таблица:
CREATE TABLE `table` (
`tableid` int(11) NOT NULL AUTO_INCREMENT,
`userid` int(11) DEFAULT NULL,
`value` double DEFAULT '0',
`date` date DEFAULT NULL,
`deleted` enum('False','True') DEFAULT 'False',
PRIMARY KEY (`tableid`),
KEY `userid_date` (`userid`)
) ENGINE=InnoDB;
Я получаю следующий результат EXPLAIN длязапрос:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE table ref userid_date userid_date 5 const 4 Using where; Using filesort
Если я перейду на использование также даты в ключе userid_date (KEY userid_date
(userid
, date
)), я получу следующий результат EXPLAIN:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE table range userid_date userid_date 9 NULL 4 Using where
Это лучше, так как он не использует сортировку файлов, но кажется, что тип не так хорош, как при использовании только идентификатора пользователя в качестве ключа.Как бы вы установили индекс для таблицы и запроса, как это?Хорошо ли использовать тип даты в качестве индекса?