खैर, शीर्षक यह सब कहता है - क्या मौजूदा डेटाबेस में pragma foreign_keys = true मेरे डेटाबेस को "कम तेज़" बनाता है?

0
Sevastyan Savanyuk 26 जून 2017, 09:01

2 जवाब

सबसे बढ़िया उत्तर

जब भी डेटा जोड़ा जाता है, हटाया जाता है या बदला जाता है, तो डेटाबेस को यह जांचना होगा कि बाधाएं अभी भी हैं। दस्तावेज़ीकरण कुछ उदाहरण सूचीबद्ध करता है कि ये चेक कैसे दिखते हैं।

व्यवहार में, यह बहुत संभावना है कि आपको वैसे भी सभी संदर्भित तालिकाओं तक पहुंचने की आवश्यकता होगी, इसलिए सब कुछ कैश में होगा। इसके अलावा, यदि डेटाबेस लिखता है तो सबसे बड़ी मंदी लेनदेन ओवरहेड है। इसलिए यह संभावना है कि अतिरिक्त जाँच से ध्यान देने योग्य विलंब न हो।

किसी भी स्थिति में, SELECT क्वेरीज़ विदेशी कुंजी बाधाओं से प्रभावित नहीं होती हैं।

0
CL. 26 जून 2017, 09:51

हालांकि स्वीकृत उत्तर पर्याप्त है, मैं यहां एक विशिष्ट उपयोग मामला रखना चाहता हूं।

किसी ऐसे व्यक्ति के लिए जिसे मौजूदा डेटाबेस के लिए विदेशी कुंजियों की बाधा का संकेत देना है और संभवतः डेटाबेस की कुछ रीफैक्टरिंग करने की आवश्यकता है, setForeignKeyConstraintsEnabled को SQLiteOpenHelper की onOpen विधि में कॉल करें।

पुस्तक से noreferrer">Android Enterprise:

onOpen विधि को केवल onCreate, onUpgrad, और onDowngrad के बाद ही कॉल किया जाता है, जिससे उन विधियों को स्कीमा के पुनर्निर्माण के दौरान तेज़ और ढीली खेलने के लिए स्वतंत्र छोड़ दिया जाता है। जिस अवसर पर किसी एप्लिकेशन को अपग्रेड के दौरान किसी तालिका या दो का नाम बदलना या फिर से बनाना चाहिए, वह कुछ समय में से एक हो सकता है कि यह वास्तव में राहत की बात है कि विदेशी कुंजी बाधाओं को लागू नहीं किया जाता है। onOpen पद्धति में विदेशी कुंजी बाधाओं को सक्षम करने से उन्हें डेटाबेस के प्रारंभ होने के बाद ही लागू किया जा सकता है।

0
Sevastyan Savanyuk 27 जून 2017, 14:44