पिछले पिछले दिनों में मैंने अपनी क्वेरी को अनुकूलित करने के लिए अजीब कुछ अजीब देखा। मैं एक साधारण क्वेरी जो की तरह कुछ करता है:MYSQL - नहीं बनाम var = false
SELECT id,name,amount FROM reservations WHERE NOT canceled ORDER BY name ASC
मैंने देखा 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
सर्वर संस्करण: 5.1.43-समुदाय – Phoenix
क्या आप तालिका के डीडीएल को पोस्ट कर सकते हैं। –