Domanda

Un campo su un modello, foo = models.ForeignKey(Foo), aggiungerà automaticamente un indice di database per la colonna, al fine di rendere più veloci le ricerche.Va bene, ma i documenti di Django non indicano se i campi nel unique_together di un meta modello ricevono lo stesso trattamento.Mi capita di avere un modello in cui un campo char elencato in unique_together richiede un indice per ricerche rapide.So che non farà male a nulla aggiungere un db_index=True duplicato nella definizione del campo, ma sono curioso.

È stato utile?

Soluzione

unique_together non aggiunge automaticamente gli indici per ogni campo incluso nell'elenco.

Le nuove versioni di Django suggeriscono invece di utilizzare le meta opzioni Index & constraint:

https://docs.djangoproject.com/it / 2.2 / ref / models / options / # unique-together

https://docs.djangoproject.com/it / 2.2 / ref / models / options / # index-together

Altri suggerimenti

Per chiunque venga qui chiedendosi se ha bisogno di un index_together oltre a unique_together per ottenere il vantaggio in termini di prestazioni dell'indice, la risposta per Postgres è no , sono funzionalmente lo stesso.

Se unique_together aggiunge un indice, sarà un indice a più colonne.

Se desideri che una delle colonne venga indicizzata individualmente, credo che tu debba specificare db_index=True nella definizione del campo.

In Django 1.5 e versioni successive , puoi utilizzare l'attributo di classe {Model}.Meta.index_together.Se avessi due campi denominati foo e bar, dovresti aggiungere:

class Meta(object):
    index_together = unique_together = [
        ['foo', 'bar']
    ]

Se disponi di un solo insieme di campi univoci, puoi utilizzare un iterabile unidimensionale per unique_together.Tuttavia, la documentazione non indica che lo stessosi applica a index_together.

Anche questo andrebbe bene:

class Meta(object):
    unique_together = 'foo', 'bar'
    index_together = [
        ['foo', 'bar']
    ]

Questo, tuttavia, NON è supportato dalla documentazione:

class Meta(object):
    unique_together = 'foo', 'bar'
    index_together = 'foo', 'bar'
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top