Задавайте вопросы, мы ответим
Вы не зашли.
Приветствую всех!
Есть табличка
CREATE TABLE `file` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`basename` varchar(255) NOT NULL DEFAULT '0',
`timeout` int(2) NOT NULL DEFAULT '2',
`lastsend` datetime DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`id`),
KEY `lastsend` (`lastsend`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 PACK_KEYS=1;
Есть запрос:
SELECT * FROM `file` WHERE `file`.`lastsend` > DATE_ADD(NOW(), INTERVAL (-`file`.`timeout`*60) SECOND )
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE file ALL NULL NULL NULL NULL 7449 Using where
7449 - столько всего записей в таблице.
Теперь вопросы:
подобный запрос (с вычисляемым значением) вообще не будет использовать индексы?
Как можно изменить чтобы задействовать индексы? Вернее как ускорить выполнение.
Отредактированно GRoM (10.04.2011 08:52:58)
Неактивен
1. Нет, никак. Если Вы пишете, что нужно что-то вычислить для каждой строки,
не нужно удивляться, что MySQL что-то вычисляет для каждой строки
2. Попробуйте добавить поле nextsend, ключик по нему и искать
WHERE nextsend > NOW();
Неактивен
Я и не удивляюсь
А вот со вспомогательным полем - это очень хорошо! (я вот не додумался и ради этого вопрос задавал)
Так и сделаю.
Спасибо!
Неактивен