2011-08-21 13 views
7

Sto creando un'applicazione rails 3 su Heroku e sta utilizzando Postgres come database. Nella mia migrazione alle rotaie ho aggiunto degli indici su tutte le colonne ID. È stato un errore? Sto iniziando a chiedermi se Postgres ha indici per default sulle colonne ID.Indici predefiniti sulla colonna id?

Se si è verificato un errore, come posso risolvere il problema? Se scrivo semplicemente una migrazione di rotaie per rimuovere gli indici dalle colonne ID, questo risolve tutto?

risposta

9

Secondo postgresql's documentation:

Adding a primary key will automatically create a unique btree index on the column 
or group of columns used in the primary key. 

Hovewer, questo non impedisce di creare un altro indice sulle stesse colonne. Potrebbe avere senso se si utilizzano criteri di indicizzazione diversi (ad esempio indice GiST). Ma se non ne sei sicuro, il 99,9% che hai appena creato indice identico.

In realtà, ciò non influisce affatto sulle funzionalità dell'applicazione. L'unica cosa di cui preoccuparsi è che gli indici vengono ricostruiti durante le operazioni di aggiornamento, quindi potrebbe porre alcuni problemi relativi alle prestazioni. Quindi, come suggerisce il manuale removing seldom-used indexes (ultima frase), è meglio rimuovere quegli indici da db.

Non ho molta familiarità con le migrazioni RoR, ma penso che la migrazione che rimuove tali indici sia sufficiente.

+0

Se eseguo una query per rimuovere l'indice sull'ID, rimuoverà "entrambi"? – Brand

+0

No, la query per eliminare un indice indica l'indice specifico da eliminare. Quindi, il calo dell'indice yada dovrebbe portare alla caduta dell'indice chiamato yada. –

0

Controllare con \ d "nometabella" quali indici sono presenti sulla tabella. Tutti sono elencati qui, compresi quelli creati automaticamente. Se trovi duplicati, è abbastanza facile rimuoverne uno (drop index "indexname" su "tablename"). Rimuoverete solo l'indice con il nome corrispondente ...

Problemi correlati