कृपया ध्यान रखें कि OPTIMIZE TABLE डीफ़्रैग्मेन्टेशन नहीं करता है। आंतरिक रूप से, OPTIMIZE TABLE कई ऑपरेशन करता है (डेटा को एक टेम्प फाइल, रिक्रिएट इंडेक्स, रिजेक्टेड इंडेक्स) में कॉपी करता है। वास्तव में, मेरे द्वारा दिखाए गए उदाहरण को मैन्युअल रूप से दिखाया जा सकता है।
उदाहरण: यदि आप अनुकूलन करते हैं mydb.mytable
, तो आप इस आदेश को दर्ज करते हैं:
OPTIMIZE TABLE mydb.mytable;
ध्यान दें कि mysql हुड के नीचे कुछ करता है:
CREATE TABLE mydb.mytable2 LIKE mydb.mytable;
ALTER TABLE mydb.mytable2 DISABLE KEYS;
INSERT INTO mydb.mytable2 SELECT * FROM mydb.mytable;
ALTER TABLE mydb.mytable2 ENABLE KEYS;
DROP TABLE mydb.mytable;
ALTER TABLE mydb.mytable2 RENAME mydb.mytable;
ANALYZE TABLE mydb.mytable;
यह उन तालिकाओं के लिए काफी उपयोगी है जो UPDATEs और DELETEs की उच्च मात्रा का अनुभव करते हैं
ऐसा करने से दो काम पूरे हो सकते हैं
डेटा को सही आकार के टुकड़ों में लोड करने के प्रयास में एक तालिका में टुकड़ों के माध्यम से देखने से mysql को रोकें। इन टुकड़ों को खत्म करने से इस ऑपरेशन में कमी आएगी।
अनुक्रमणिका आँकड़ों को फिर से जोड़ने से MySQL क्वेरी ऑप्टिमाइज़र को बेहतर योजना बनाने में मदद मिलती है। अन्यथा, क्वेरीज़ निष्पादन समय में बिगड़ सकती हैं क्योंकि MySQL क्वेरी ऑप्टिमाइज़र ने EXPLAIN योजना में खराब अनुमान लेने का निर्णय लिया। यह एक तालिका का एक निश्चित लक्षण होगा जिसमें UPDATEs और DELETEs की मात्रा अधिक होती है।
चेतावनी
कैशिंग के संबंध में, पूर्ण टेबल स्कैन करने के कारण कैशिंग जल्दी से गोता लगाता है। MyISAM इंडेक्स पृष्ठों के लिए MyISAM कुंजी कैश के अंदर और बाहर प्रवाहित होती है। InnoDB के लिए, डेटा और इंडेक्स पेज InnoDB बफर पूल के अंदर और बाहर बहते हैं।