katılmak, ama hala neden açıklayamam katılmak sol mySQL sorgu 115 ms Vs 478ms. Her ikisi de InnoDB kullanıyorlar ve tanımlanmış ilişkiler var. 'Card_legality' yaklaşık 200k satır içerir, 'legality' tablosu ise 11 satır içerir.Neden, 'önemli ölçüde' içimdeki daha hızlı Bunu araştırdık
CREATE TABLE `card_legality` (
`card_id` varchar(8) NOT NULL DEFAULT '',
`legality_id` int(3) NOT NULL,
`cl_boolean` tinyint(1) NOT NULL,
PRIMARY KEY (`card_id`,`legality_id`),
KEY `legality_id` (`legality_id`),
CONSTRAINT `card_legality_ibfk_2` FOREIGN KEY (`legality_id`) REFERENCES `legality` (`legality_id`),
CONSTRAINT `card_legality_ibfk_1` FOREIGN KEY (`card_id`) REFERENCES `card` (`card_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Ve: İşte her biri için yapıdır
CREATE TABLE `legality` (
`legality_id` int(3) NOT NULL AUTO_INCREMENT,
`l_name` varchar(16) NOT NULL DEFAULT '',
PRIMARY KEY (`legality_id`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=latin1;
Ben sadece SOL-JOIN kullanabilirsiniz, ancak bu, çok doğru ... herhangi bir düşünce lütfen görünmüyor?
GÜNCELLEME: İstendiği gibi, her biri için açıklamanın sonuçlarını ekledim. Daha önce çalıştırılmış, ama bundan tam bir anlayış var taklit yok ..
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE cl ALL PRIMARY NULL NULL NULL 199747 Using where
1 SIMPLE l eq_ref PRIMARY PRIMARY 4 hexproof.co.uk.cl.legality_id 1
VE, iç birleşim:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE l ALL PRIMARY NULL NULL NULL 11
1 SIMPLE cl ref PRIMARY,legality_id legality_id 4 hexproof.co.uk.l.legality_id 33799 Using where
Bu arada 'card_id' bir seçimim olmadığı için VARCHAR'tır, normalde bunu kabul etmem. – Ben