मूल रूप से हम माईस्कल्स प्रदर्शन से बहुत खुश हैं, इसी तरह के प्रश्न एक दूसरे भाग में पूर्ण हो जाते हैं। अब हमें इस क्वेरी के साथ समस्या का सामना करना पड़ रहा हैMySQL प्रदर्शन को कम कर सकता है?
SELECT dc.id,dmr.art_id
FROM dmr
JOIN dma ON dma.id = dmr.dml_id
JOIN dc ON dc.id = dma.dc_id
WHERE dmr.art_id = 2285
5021 पंक्तियों को लाने में 50 सेकंड लगते हैं। एक लापता सूचकांक शायद इस तरह के मुद्दों के लिए सबसे आम कारण है। तो मैंने EXPLAIN द्वारा क्वेरी से पहले और यह क्वेरी प्लान प्राप्त किया जो दिखाता है कि केवल इंडेक्स का उपयोग अनुक्रमिक स्कैन नहीं किया जाता है।
टेबल डीएमआर और डीएमए में 3 मिलियन पंक्तियां हैं, डीसी में 6000 पंक्तियां हैं।
+----+-------------+-------+--------+-------------------------------+----------------+---------+--------------------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+--------+-------------------------------+----------------+---------+--------------------+------+-------------+
| 1 | SIMPLE | dmr | ref | FKC33D5199F17E1825,ix_art_ref | ix_art_ref | 5 | const | 5021 | Using where |
| 1 | SIMPLE | dma | eq_ref | PRIMARY,FK8C6E1445153BBDC9 | PRIMARY | 8 | dev.dmr.dml_id | 1 | |
| 1 | SIMPLE | dc | eq_ref | PRIMARY | PRIMARY | 8 | dev.dma.dc_id | 1 | Using index |
+----+-------------+-------+--------+-------------------------------+----------------+---------+--------------------+------+-------------+
इस समस्या का कारण क्या हो सकता है?
MySQL संस्करण इंजन के रूप में InnoDB का उपयोग कर 5.5 है। (विंडोज़ पर केवल डिफ़ॉल्ट पैरामीटर)।
संपादित
जब मैं हटाने जहां खंड, mysql रिटर्न (विशाल) तुरंत सेट परिणाम। इस मामले में क्वेरी योजना की तरह दिखता है:
+----+-------------+-------+-------+----------------------------+--------------------+---------+------------+------+--------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+-------+----------------------------+--------------------+---------+------------+------+--------------------------+
| 1 | SIMPLE | dc | index | PRIMARY | FKAEB144C64FA71464 | 9 | NULL | 4037 | Using index |
| 1 | SIMPLE | dma | ref | PRIMARY,FK8C6E1445153BBDC9 | FK8C6E1445153BBDC9 | 9 | dev.dc.id | 263 | Using where; Using index |
| 1 | SIMPLE | dmr | ref | FKC33D5199F17E1825 | FKC33D5199F17E1825 | 9 | dev.dma.id | 1 | Using where |
+----+-------------+-------+-------+----------------------------+--------------------+---------+------------+------+--------------------------+
आप हार्ड डिस्क द्वारा बाध्य I/O की सबसे अधिक संभावना है। 'Innodb_buffer_pool' आकार परिवर्तक को अपनी रैम का 70% बढ़ाएं। इस तरह कामकाजी डेटासेट का हिस्सा स्मृति में रखा जाएगा और लुकअप बहुत तेज होगा। –
तालिका का विश्लेषण करने का प्रयास करें ... http: //dev.mysql.com/doc/refman/5.0/en/analyze-table.html –
@Neville - मैंने पहले ही किया है, यह कहता है कि स्थिति ठीक है। – stacker