В последние дни я заметил странную оптимизацию моего запроса.
У меня есть простой запрос, который делает что-то вроде:
SELECT id,name,amount FROM reservations WHERE NOT canceled ORDER BY name ASC
Я заметил, что mysql не использовал никаких индексов, поэтому я начал проводить некоторые эксперименты.
Случайно я заменил «НЕ отменено» на «отменено = ложь», а затем Mysql начал использовать «отменено» в качестве индекса.
После этого я попытался использовать противоположное:
SELECT ... FROM reservations WHERE canceled ORDER BY ...
Тот же результат! Когда я изменяю это на «cancelled = true», индекс снова работает.
Мой вопрос: КАК ПРИХОДИТЬ ?! Разве использование «НЕ» не является «элегантным» способом? Во всяком случае, я не ожидал, что это что-то изменит.
Я использую InnoDB в качестве движка, но я получаю тот же результат, используя MyISAM.
Может кто-нибудь прояснить ситуацию?
Спасибо.
Редактировать: Структура таблицы
CREATE TABLE `reservations` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`trip_code` varchar(10) DEFAULT NULL,
`departure_date` date DEFAULT NULL,
`amount` float DEFAULT NULL,
`name` varchar(45) DEFAULT NULL,
`canceled` tinyint(1) NOT NULL DEFAULT '0',
`created_date` date NOT NULL,
`creator_user` int(11) NOT NULL DEFAULT '1',
`last_update_user` int(11) NOT NULL DEFAULT '1',
PRIMARY KEY (`id`),
KEY `trip_code` (`trip_code`),
KEY `departure_date` (`departure_date`),
KEY `created_date` (`created_date`),
KEY `canceled` (`canceled`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=123181 ;