2012-07-05 27 views
22

En MySQL, cuando creo una clave primaria compuesta, por ejemplo con las columnas X, Y, Z, las tres columnas se convierten en índices automáticamente. ¿Pasa lo mismo con Postgres?clave primaria compuesta de PostgreSQL

+2

¿Quiere decir que MySQL crea ** tres ** * índices *? Suena terriblemente extraño –

Respuesta

52

Si crea una clave primaria compuesta, en (x, y, z), PostgreSQL implementa esto con la ayuda de un índice ÚNICO de varias columnas en (x, y, z). Además, las tres columnas tienen que ser NOT NULL, por supuesto, que es la principal diferencia entre un PRIMARY KEY y un UNIQUE INDEX.

Además de las restricciones evidentes en los datos, el multi-column index también tiene un efecto algo diferente en el rendimiento de las consultas de tres índices individuales en x, y y z.

Tuvimos una discusión muy minuciosa sobre eso recientemente on dba.SE in this related question. Con ejemplos, puntos de referencia, discusión y perspectivas para la próxima función de index-only scans in version 9.2.

En particular, una clave principal en (x, y, z) será acelerar las consultas con las condiciones de x, (x,y) o (x,y,z) de manera óptima. También ayudará con consultas en y, z, (y,z) o (x,z) pero en mucha menor medida.

Si necesita acelerar las consultas en las últimas combinaciones, puede crear uno o más índices adicionales.

2

Yes:

PostgreSQL crea automáticamente un índice único cuando se define una restricción única o clave principal de una tabla. El índice cubre las columnas que conforman la clave primaria o la restricción única (un índice de varias columnas, si corresponde), y es el mecanismo que impone la restricción.

+1

Creo que la pregunta era si cada columna tiene su propio índice. –

+0

De acuerdo. La pregunta no es si 1 índice de columnas múltiples se crea automáticamente, pero si se crean 3 índices de columnas individuales. Y la respuesta es no. Su respuesta sigue siendo relevante ya que proporciona información suplementaria, después de ser editada, por supuesto. De hecho, la respuesta de @dondi-michael-stroma es más relevante que la que ha elegido el solicitante original. – Chucky

1

No, obtiene un índice para la clave principal de tres columnas.

Cuestiones relacionadas