मुझे डेटा की लगभग 150,000 पंक्तियों के साथ एक बहुत बड़ी MySQL तालिका मिली है। वर्तमान में, जब मैं कोशिश करता हूं और दौड़ता हूं
SELECT * FROM table WHERE id = '1';
आईडी ठीक है क्योंकि आईडी फ़ील्ड प्राथमिक सूचकांक है। हालांकि, परियोजना में हाल ही के विकास के लिए, मुझे डेटाबेस को किसी अन्य क्षेत्र से खोजना होगा। उदाहरण के लिए:
SELECT * FROM table WHERE product_id = '1';
इस क्षेत्र को पहले अनुक्रमित नहीं किया गया था; हालाँकि, मैंने एक जोड़ा है, इसलिए mysql अब फ़ील्ड को अनुक्रमित करता है, लेकिन जब मैं उपरोक्त क्वेरी को चलाने का प्रयास करता हूं, तो यह बहुत धीमी गति से चलता है। एक एक्सक्लूसिव क्वेरी से पता चलता है कि जब मैंने पहले ही एक जोड़ा है, तो product_id फ़ील्ड के लिए कोई इंडेक्स नहीं है, और परिणामस्वरूप क्वेरी किसी भी पंक्ति को वापस करने के लिए 20 मिनट से 30 मिनट तक ले जाती है।
मेरे पूर्ण परिणाम हैं:
| id | select_type | table | type | possible_keys| key | key_len | ref | rows | Extra |
+----+-------------+-------+------+--------------+------+---------+------+-------+------------------+
| 1 | SIMPLE | table | ALL | NULL | NULL | NULL | NULL |157211 | Using where |
+----+-------------+-------+------+--------------+------+---------+------+-------+------------------+
यह नोट करना मददगार हो सकता है कि मैंने अभी-अभी देखा है और ID फ़ील्ड को INT के रूप में संग्रहीत किया गया है जबकि PRODUCT_ID फ़ील्ड को VCHCHAR के रूप में संग्रहीत किया गया है। क्या यह समस्या का स्रोत हो सकता है?
EXPLAIN
परिणाम पोस्ट कर सकते हैं ? क्या आप निश्चित हैं कि कोई सूचकांक नहीं है ? या वहाँ सूचकांक है, लेकिन MySQL का उपयोग करने के लिए नहीं चुन रहा है?