मैं एक बहुत ही सरल प्रश्न हैं:मेरे सरल MySQL क्वेरी सूचकांक का उपयोग नहीं करता
SELECT comments.*
FROM comments
WHERE comments.imageid=46
और ये मेरे तालिका है:
CREATE TABLE IF NOT EXISTS `comments` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`imageid` int(10) unsigned NOT NULL DEFAULT '0',
`uid` bigint(20) unsigned NOT NULL DEFAULT '0',
`content` text CHARACTER SET utf8,
`adate` datetime DEFAULT NULL,
`ip` int(10) unsigned DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `ids` (`imageid`) USING BTREE,
KEY `dt` (`adate`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=12 ;
लेकिन MySQL इस सरल प्रश्न पर सूचकांक उपयोग नहीं कर सकते । यहां व्याख्या परिणाम है:
id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE comments ALL ids NULL NULL NULL 4 75.00 Using where
जबकि मैं इस क्वेरी को बदलता हूं, माइस्क्ल इंडेक्स का उपयोग कर सकता है। क्यूं कर? :
SELECT comments.id
FROM comments
WHERE comments.imageid=46
यहाँ
समझाने है:
id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE comments ref ids ids 4 const 4 100.00 Using index
से मेल नहीं खाता है तो यह तेज़ होगा * यह नहीं है "लेकिन MySQL ** ** इंडेक्स का उपयोग नहीं कर सकता" *। यह है: "लेकिन MySQL ** ** सूचकांक का उपयोग नहीं करेगा"। 'Possible_keys = ids' और' key = NULL' सुझाव देते हैं कि इंडेक्स का उपयोग करके ऑप्टिमाइज़र द्वारा जांच की गई, और अस्वीकार कर दिया गया। पूर्ण टेबल स्कैन को तेज़ माना जाता था - और यह शायद आपके मामले में है। –