Postgres et les Index sur les Clés Étrangères et les Clés Primaires
Ne Postgres mettre automatiquement des index sur les Clés Étrangères et les Clés Primaires? Comment puis-je dire? Est-il une commande qui sera de retour tous les index d'une table?
Vous devez vous connecter pour publier un commentaire.
PostgreSQL crée automatiquement des index sur les clés primaires et les contraintes unique, mais pas sur le référencement côté des relations de clé étrangère.
Lorsque Pg crée un indice implicite, il émet un
NOTICE
niveau de message que vous pouvez voir danspsql
et/ou les journaux du système, de sorte que vous pouvez voir quand il arrive. Automatiquement créé des index sont visibles dans\d
de sortie pour une table, trop.La documentation sur les index uniques dit:
et de la documentation sur les contraintes dit:
Par conséquent, vous devez créer des index sur les touches vous-même si vous le souhaitez.
Notez que si vous utilisez primaire étrangères-clés, comme 2 FK est comme un PK dans une M-à-N table, vous aurez un indice sur le PK et probablement n'avez pas besoin de créer un extra index.
Alors que c'est généralement une bonne idée de créer un index sur (ou de) votre référencement du côté des colonnes de clé étrangère, il n'est pas nécessaire. Chaque indice vous ajoutez ralentit les opérations DML baisse légèrement, de sorte que vous payez un coût de performance sur tous les
INSERT
,UPDATE
ouDELETE
. Si l'index est rarement utilisé, il peut ne pas être la peine d'avoir.Si vous voulez la liste des index de toutes les tables dans votre schéma(s) de votre programme, toutes les informations sont à portée de main dans le catalogue:
Si vous souhaitez vous plonger plus loin (telles que les colonnes et de commande), vous avez besoin de regarder pg_catalog.pg_index. À l'aide de
psql -E [dbname]
est très pratique pour trouver comment interroger le catalogue.\di
vous trouverez également la liste de tous les index de la base de données." (commentaire copié d'autres sous forme de réponse, s'applique ici aussi)Cette requête liste des index manquants sur les clés étrangères, original source.
where
clauses: Entre autres, il ne prend que des tables en considération la taille est de plus de 9 MO.Oui - pour les clés primaires, non - pour les clés étrangères (plus dans le docs).
dans "psql" montre une description d'une table, y compris l'ensemble de ses indices.
J'aime la façon dont c'est expliqué dans l'article Cool caractéristiques de performance de EclipseLink 2.5
Pour un
PRIMARY KEY
, un index sera créé avec le message suivant:Pour un
FOREIGN KEY
, la contrainte ne sera pas créé si il n'y a pas d'index sur la référenceed table.Un indice de référenceing tableau n'est pas nécessaire (si désiré), et, par conséquent, ne sera pas créé de façon implicite.