2010-07-29 5 views
2

Ceci est une question assez simple, mais c'est une question sur laquelle je ne trouve pas de réponse ferme.les index nécessaires pour l'héritage de table dans postgres?

J'ai une table parente dans PostgreSQL, puis plusieurs tables enfants qui ont été définies. Un déclencheur a été établi, et les tables enfants ont seulement des données insérées si un champ, disons le champ x, répond à un certain critère.

Quand j'Interrogation de la table parent avec un champ basé sur x, PostgreSQL sait aller immédiatement à la table des enfants qui est lié à cette valeur particulière de x.

Cela étant dit, je n'ai pas besoin de spécifier un index particulier sur la colonne x do I? PostgreSQL sait déjà comment trier, et en ajoutant un index au parent x, PostgreSQL génère donc des index uniques sur x pour chacune des nouvelles tables enfants.

Créer cet index est un peu redondant, non?

Répondre

3

Création d'un index sur la table enfant pour x, si x n'a qu'une seule valeur (ou un très, très petit nombre de valeurs) s'il s'agit probablement d'une perte, oui. Le planificateur balayerait toute la table de toute façon.

Si x est un horodatage et que vous spécifiez une période qui n'est peut-être pas une partition entière, ou si x est une autre plage ou un ensemble de valeurs, un index serait probablement un gain. Editer: Quand je dis une valeur ou une plage de valeurs, je veux dire, par table enfant.

+0

x est un nom de site qui est une liste prédéfinie. Ainsi, par exemple, la table parent peut être 'city_description', avec la colonne 'city'. disons que j'ai 10 tables enfants, 'chicago_city_description', 'dallas_city_description', 'nyc_city_description' ..., où mon déclencheur prend la décision pour la table enfant en fonction de la valeur de 'city'. cette colonne ne sera jamais un horodatage. alors se débarrasser de l'index est bien? –

+0

Si x est un nom de site et qu'il y a un nom de site par table enfant - supprimez l'index. – rfusca

+0

beaucoup obligé. Merci pour l'info. –

Questions connexes