2017-06-08 13 views
6

index_together Django 1.11 अंतर डेटाबेस अनुक्रमणिका बनाने के लिए नए तरीके प्रदान करता है। अब तक हम प्रत्येक क्षेत्र में db_index=True था:डेटाबेस अनुक्रमित: db_true, अनुक्रमित के बीच और

# example 1 

class Person(models.Model): 
    name = models.CharField(db_index=True) 
    age = models.IntegerField(db_index=True) 

अब हम models.Index और class Meta ब्लॉक के भीतर indexes घोषित करने की संभावना है - या यहाँ तक कि index_together

कहा कि मैं दो शक है:

1. उदाहरण 1 से कोड नीचे दिए गए उदाहरण 2 के रूप में एक ही बात कर रही है?

# example 2 

class Person(models.Model): 
    name = models.CharField() 
    age = models.IntegerField() 

    class Meta: 
     indexes = [ 
      models.Index(fields=['name']), 
      models.Index(fields=['age']) 
     ] 

2. क्या कई क्षेत्रों और index_together साथ index के बारे में: बिल्कुल वही बात कर नीचे दिए गए उदाहरणों 3 और 4 कर रहे हैं?

# example 3 

class Person(models.Model): 
    name = models.CharField() 
    age = models.IntegerField() 

    class Meta: 
     indexes = [ 
      models.Index(fields=['name', 'age']) 
     ] 
# example 4 

class Person(models.Model): 
    name = models.CharField() 
    age = models.IntegerField() 

    class Meta: 
     index_together = [['name', 'age']] 

3 और 4 के बीच 1 और 2 के बीच diferences, और क्या अंतर है? मैं क्या खो रहा हूँ? बहुत धन्यवाद।

उत्तर

3

डॉक्स के अनुसार, आप अनुक्रमणिका को एक नाम दे सकते हैं और आप सूचकांक में प्रत्येक क्षेत्र के लिए एक आदेश सेट कर सकते हैं (लेकिन सभी डीबीएस समान रूप से समर्थित हैं)। लेकिन वास्तविकता में इस के पूरे मुद्दे जहां समर्थित अनुक्रमित के अन्य प्रकार परिभाषित करने के लिए अतिरिक्त लचीलापन लाना है।

वर्तमान में Django 1.11 के रूप में और केवल पोस्टग्रेस का उपयोग करते समय आप जीआईएन और ब्रिन इंडेक्स को परिभाषित कर सकते हैं यदि यह आपकी आवश्यकताओं के अनुरूप कुछ है। (https://docs.djangoproject.com/en/1.11/ref/contrib/postgres/indexes/ पर django.contrib.postgres.indexes देखें)

आपके द्वारा वर्णित इंडेक्स को परिभाषित करने में सक्षम होने के नाते केवल सबसे सामान्य मामला है और जब तक आप उपर्युक्त नाम (इंडेक्स या ऑर्डरिंग फ़ील्ड नामकरण) का उपयोग नहीं करना चाहते हैं, तो आप शायद इंडेक्स का उपयोग करें जैसा कि आप अभी तक कर रहे हैं (db_index और index_together)।

+0

बस एक अतिरिक्त प्रश्न: यदि मैं उदाहरण 1 से उदाहरण 2 में बदलता हूं और 'makemigrations' Django चलाता हूं तो मेरी सभी पिछली अनुक्रमणिका को डंप करता है और उन्हें फिर से बनाया जाता है - क्या यह अपेक्षित है? क्यूं कर? – cuducos

+1

मुझे लगता है कि के बारे में थोड़ा अनिश्चित हूँ, लेकिन मुझे लगता है कि Django सिर्फ यह नहीं पता कि उन सुविधाओं से संबंधित हैं, भले ही वे भी वही करता है। जब माइग्रेशन की गणना की जा रही है तो मुझे लगता है कि Django नोटिस करता है कि आपने 'db_index = True' या 'index_together' को छोड़ दिया है, जो इंडेक्स को छोड़ने में अनुवाद करता है। साथ ही Django नोटिस करता है कि आपने 'idexes' जोड़ा और इस प्रकार यह उन्हें बनाता है। ऐसा लगता है कि यह एक दूसरे से जुड़ने में असमर्थ है। यह एक समस्या नहीं होनी चाहिए, जब तक आप वास्तव में बड़े पैमाने पर अनुक्रमित है कि ऐसा करने से निर्मित हो जाएगा। आपको अपने विशेष मामले का मूल्यांकन करना होगा। –

+1

यह एक तरह से मुझे तो हैरानी के रूप में नए 'indexes' सुविधा सिर्फ' db_index' और 'index_together' generalising है। वे उन्हें नए तरीके से संभालने के क्लासिक तरीके का अनुवाद कर सकते थे और कुछ चेक जोड़ सकते थे जो Django को समकक्ष बताते हैं। मुझे लगता है कि कुछ अतिरिक्त तकनीकी कारण हैं जिन्हें मैं नहीं जानता कि उन्होंने उन्हें इस तरह से संभालने का निर्णय क्यों लिया। शायद कोई और यहां कुछ प्रकाश डाल सकता है। –

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