在過去的幾天裏,我注意到一些奇怪的事情,優化我的查詢。 我有一個簡單的查詢,這確實是這樣的:MYSQL - 不與var = false
SELECT id,name,amount FROM reservations WHERE NOT canceled ORDER BY name ASC
我的mysql沒有使用任何索引注意到了,所以我就開始做一些實驗。 我偶然用「取消= false」取代了「NOT取消」,然後,Mysql開始使用「取消」作爲索引。 之後,我試着用相反的:
SELECT ... FROM reservations WHERE canceled ORDER BY ...
同樣的結果!當我將其更改爲「取消=真」時,該索引再次起作用。
我的問題是:怎麼回事?不是使用「不」而是「優雅」的方式?無論如何,我沒有想到它會有所作爲。
我使用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 ;
你使用哪個版本? – neworld
Server版本:43年1月5日,社區 – Phoenix
你能張貼表的DDL。 –