2010-01-27 10 views
41

मैं sqlite3 फ़ाइल के साथ काम कर रहा हूं।"तालिका से हटाएं" के बाद sqlite फ़ाइल आकार बदलें

सबसे पहले, मैंने अपेक्षाकृत बड़े डेटाबेस में प्रवेश किया, फ़ाइल का आकार लगभग 100 एमबी था।

से मैं

$db->exec("DELETE FROM table"); 

बनाया और कहा कि डेटाबेस का सिर्फ एक छोटा सा हिस्सा में प्रवेश किया। लेकिन फ़ाइल का आकार 100 एमबी बना रहा।

अपनी सामग्री को हटाते समय SQLite फ़ाइल आकार को बदलने के लिए आपको क्या करना चाहिए?

उत्तर

71

जो आदेश आप खोज रहे हैं वह vacuum है। ऑटो-वैक्यूमिंग चालू करने के लिए pragma भी है।

प्रलेखन से:

जब एक वस्तु (तालिका, अनुक्रमणिका, ट्रिगर, या दृश्य) डेटाबेस से हटा दिया गया है, यह खाली जगह के पीछे छोड़ देता है। यह रिक्त स्थान का पुन: उपयोग किया जाएगा अगले समय नई जानकारी डेटाबेस में जोड़ा गया है। लेकिन इस बीच, डेटाबेस फ़ाइल से सख्ती से आवश्यक हो सकती है। इसके अलावा, अक्सर आवेषण, अद्यतन, और हटाए गए डेटाबेस में जानकारी खंडित होने के कारण डेटाबेस डेटाबेस में एक स्थान पर क्लस्टर्ड की तुलना में स्कैरर्ड आउट हो सकता है।

वैक्यूम आदेश एक अस्थायी डेटाबेस फ़ाइल की सामग्री को कॉपी करने और प्रतिलिपि से मूल डेटाबेस फ़ाइल पुन: लोड करके मुख्य डेटाबेस साफ। यह मुफ्त पृष्ठों को समाप्त करता है, तालिका डेटा को संगत, संरेखित करता है और अन्यथा डेटाबेस फ़ाइल संरचना को साफ़ करता है।

+0

क्या अभी तक ओवरडिन हटाए गए तालिका पंक्तियों को पुनर्स्थापित करने का कोई तरीका नहीं है? – Blauhirn

-2

सफाई डेटाबेस SQLite में सफाई के लिए दो आदेश हैं- रीइंडेक्स और वैक्यूम। इंडेक्स का पुनर्निर्माण करने के लिए रीइन्डेक्स का उपयोग किया जाता है। इसमें दो रूप हैं: reindex collation_name; reindex table_name | index_name;

12

आप इस

$db->exec("DELETE FROM table"); 
$db->exec("vacuum"); 

कर सकते हैं और फ़ाइल आकार बदल जाएगा।

संबंधित मुद्दे