Son son günlerde, sorgumu optimize eden garip bir şey fark ettim. Ben böyle bir şey yapar basit bir sorgu var: Ben MySQL herhangi dizini kullanarak değildi farkMYSQL - DEĞİL vs var = yanlış
SELECT id,name,amount FROM reservations WHERE NOT canceled ORDER BY name ASC
, bu yüzden bazı deneyler yapmaya başladı. Yanlışlıkla "iptal edilmedi" "iptal edildi" ile değiştirildi ve sonra Mysql "iptal edildi" dizin olarak kullanmaya başladı.
SELECT ... FROM reservations WHERE canceled ORDER BY ...
aynı sonucu: Bundan sonra tam tersini kullanarak çalıştı! Bunu "iptal edilen = doğru" olarak değiştirdiğimde, dizin tekrar çalışır.
Soruma soru: HOW COME ?! "Zarif" yolu "DEĞİL" kullanmıyor mu? Her neyse, bir fark yaratmasını beklemiyordum.
Motor olarak InnoDB kullanıyorum, ancak aynı sonucu MyISAM kullanarak elde ediyorum. Birisi bir şeyleri netleştirebilir mi? Teşekkürler.
Düzenleme: Tablo yapısı bir dizin kullanıyor olsa
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 ;
hangi sürümü kullanıyorsunuz? – neworld
Sunucu sürümü: 5.1.43-community – Phoenix
Tablonun DDL'sini yükleyebilir misiniz? –