MYSQL - NOT vs var=false

В последние дни я заметил что-то странное, оптимизирующее мой запрос. У меня есть простой запрос, который делает что-то вроде:

   SELECT id,name,amount FROM reservations WHERE NOT canceled ORDER BY name ASC

Я заметил, что mysql не использует индекс, поэтому я начал проводить некоторые эксперименты. Случайно я заменил «NOT canceled» на «canceled=false», а затем Mysql начал использовать «canceled» в качестве индекса. После этого я попробовал использовать противоположное:

   SELECT ... FROM reservations WHERE canceled ORDER BY ...

Тот же результат! Когда я изменяю это на "canceled=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 ;
11
задан Phoenix 7 November 2011 в 10:44
поделиться