मैं इस पर गौर किया है, लेकिन मैं अभी भी व्याख्या नहीं कर सकते क्यों MySQL क्वेरी है 115 एमएस बनाम 478 एमएमएस। वे दोनों InnoDB का उपयोग कर रहे हैं और संबंधों को परिभाषित किया गया है। 'Card_legality' में लगभग 200k पंक्तियां होती हैं, जबकि 'वैधता' तालिका में 11 पंक्तियां होती हैं।क्यों, में शामिल होने के लिए छोड़ दिया 'काफी' मेरे भीतर की तुलना में तेजी से शामिल हो
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;
और: यहाँ प्रत्येक के लिए संरचना है
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;
मैं बस वाम-शामिल हों इस्तेमाल कर सकते हैं, लेकिन यह काफी सही है ... कोई विचार नहीं लगता है, कृपया?
अद्यतन: अनुरोध के अनुसार, मैंने प्रत्येक के लिए व्याख्या के परिणाम शामिल किए हैं। मैं यह पहले समाप्त हो चुकी थी, लेकिन मैं इसके बारे में एक पूरी तरह से समझने के लिए बहाना न ..
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
और भीतरी में शामिल होने:
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
जिस तरह से 'card_id' एक वर्चर है क्योंकि मेरे पास कोई विकल्प नहीं है, मैं आमतौर पर इसे स्वीकार नहीं करता। – Ben