2009-07-30 28 views
8

¿Qué hace la expresión INDEX? Un ejemplo al final:ÍNDICE en Postgres?

CREATE TABLE tags (
    tag_id      varchar(255) NOT NULL, 
    "{Users}{userID}question_id" int4 NOT NULL, 
    tag       varchar(20), 
    CONSTRAINT tag 
    PRIMARY KEY (tag_id)); 
CREATE INDEX tags_tag 
    ON tags (tag); 
+5

¿Qué les pasa a las personas que rechazan preguntas como esta? Esta es una pregunta perfectamente válida y, de hecho, hay muchas personas que * piensan * que saben todo sobre las bases de datos y no pueden explicar cómo funciona un índice. –

Respuesta

10

un index es una estructura de base de datos que puede ayudar a acelerar el acceso a las filas individuales de la base de datos, cuando la búsqueda basada en el campo (s) en el índice.

En su ejemplo, la instrucción CREATE INDEX crea un índice llamado tags_tag en la tabla tags utilizando la columna tag. Si desea buscar filas de la tabla según el campo tag, la base de datos puede usar el índice para buscar la fila de manera más eficiente. Sin un índice, la base de datos podría tener que recurrir a un análisis completo de la tabla, lo que puede llevar mucho más tiempo (dependiendo de muchos factores, como el tamaño de la tabla, la distribución de valores, los criterios de consulta exactos). Las diferentes bases de datos también admiten diferentes tipos de índices, que se pueden usar para buscar datos de diferentes maneras.

También hay una desventaja de los índices: para cada índice, las velocidades de escritura disminuyen para esa tabla. Si inserta una fila, tener un índice significa que, además de la escritura de la base de datos en la misma fila, también deberá actualizar el índice.

Decidir qué columnas poner un índice puede ser complicado, y como siempre, los puntos de referencia o las consultas en el mundo real con datos del mundo real son la forma más precisa de medir el rendimiento. En general, querrá índices en las columnas que va a buscar. Entonces, si es probable que desee buscar una fila por tag, entonces definitivamente tiene sentido poner un índice allí. Pero si tiene una libreta de direcciones, es probable que (probablemente) no tenga que buscar en la calle, código postal o número de teléfono, por lo que no valdrá la pena el rendimiento de escritura.

La (s) columna (s) de clave principal casi siempre tendrán un índice generado automáticamente por la base de datos. Y si desea mantener los valores de una columna en particular como únicos, se puede crear un UNIQUE INDEX para aplicar esto.

This AS Pregunta pregunta acerca de las reglas generales para los índices de la base de datos, que pueden ser útiles.

+0

¿Hay algún tipo de control cuando se necesita un índice? Intuí intuitivamente el índice en el ejemplo porque las etiquetas de estilo SO probablemente tienen la velocidad de acceso como el cuello de botella. –

+0

¿Es un índice? Guardo md5deep (question_id, user_id, time) -hashes como clave principal de una tabla en lugar de consultar cada valor por separado. –

+0

Se acelera el tiempo de acceso para el intercambio: aumento del tiempo de escritura. –

Cuestiones relacionadas