2011-06-01 13 views
15

जैसा कि मुझे अपने छोटे अनुप्रयोगों के लिए स्क्लाइट का उपयोग करने का अनुभव होता है, मैं हमेशा अपने डेटाबेस पर अनावश्यक डेटा को हटाने के लिए क्लीनअप फ़ंक्शन का उपयोग करने के लिए sqliteadmin का उपयोग करता हूं।एसक्यूलाइट में डेटाबेस क्लीनअप के लिए विधि क्या है?

अब मैं अपने आवेदन में एक विधि बनाना चाहता हूं जो sqliteadmin क्लीनअप जैसा ही करता है।

यह कैसे करें?

सादर धन्यवाद

उत्तर

14

यह आप VACUUM बयान के लिए देख रहे है।

31
using (SQLiteCommand command = m_connection.CreateCommand()) 
{ 
    command.CommandText = "vacuum;"; 
    command.ExecuteNonQuery(); 
} 

वैक्यूम निष्पादित करने के तरीके पर सटीक उत्तर दिया गया है।

2

दिलचस्प पोस्ट स्क्रिप्ट। SQLite में वैक्यूम कथन पुनर्निर्माण के लिए पूरे डेटाबेस को एक temp फ़ाइल में प्रतिलिपि बनाता है। यदि आप उपयोगकर्ता या कुछ प्रक्रिया के माध्यम से "मांग पर" करने की योजना बना रहे हैं, तो यह आपके डेटाबेस को 100 एमबी से ऊपर हो जाने के बाद डिस्क स्पेस और समय पूरा करने में काफी समय ले सकता है, खासकर यदि आप कई जीबी देख रहे हैं। उस स्थिति में, जब आप डेटाबेस बनाते हैं, और VACUUM चलाने के बजाए रिकॉर्ड हटाते हैं तो आप AUTO_VACUUM = true pragma स्टेटमेंट का उपयोग करना बेहतर कर सकते हैं। अब तक, यह एकमात्र लाभ है जिसे मैं पा सकता हूं कि SQL सर्वर कॉम्पैक्ट SQLite से अधिक है। एसक्यूएल सर्वर कॉम्पैक्ट डेटाबेस की मांग SHRINK SQLite के वैक्यूम की तुलना में बेहद तेज़ है।

+0

अभी तक इसे आजमाने का समय नहीं है, लेकिन यह प्रज्ञा अच्छी लगती है। हालांकि, चूंकि यह डिफ़ॉल्ट नहीं है, इसलिए किसी को यहां सटीक व्यवहार को देखना चाहिए: http://www.sqlite.org/pragma.html#pragma_auto_vacuum – tmighty

+1

इसके अलावा, तर्क केवल "सत्य" या "झूठी" नहीं हो सकते हैं, बल्कि "0,1,2, कोई नहीं, पूर्ण, संगत"। – tmighty

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