2009-08-26 23 views
5

lo tanto, tengo una mesa de suscripciones:índices Agregando gerrund tablas

id - int(11) (With Primary Key) 
user_id - int(11) 
group_id - int(11) 
role - int(11) 
pending - tinyint(1) 
created_at - datetime 
updated_at - datetime 

menudo que estoy haciendo consultas para ver si los usuarios tienen derechos de acceso similares a esta:

SELECT * FROM `subscriptions` WHERE (group_id = 1 AND user_id = 2 AND pending = 0) LIMIT 1 

estoy ¿Se pregunta si agregar un índice único en subscriptions(group_id, user_id, pending) ayudaría u obstaculizaría en este caso? ¿Cuáles son las mejores prácticas para indexar casi toda una tabla?

Respuesta

1

Esto sin duda ayudará, especialmente si reemplaza * con 1 en su consulta (si solo quiere comprobar que la fila existe). Sin embargo, puede tener un pequeño impacto en DML.

Creación de un índice es, de hecho, la creación de un B-Tree que tiene esta estructura:

indexed_col1 
indexed_col2 
... 
indexed_colN 
row_pointer 

como clave, el row_pointer ser compensado un archivo (por MyISAM) o el valor de la PRIMARY KEY (por InnoDB) la fila

Si no usa otras columnas pero está indexada en su consulta, toda la información que necesita puede recuperarse solo del índice, sin tener que consultar la tabla en sí.

Si sus datos son intrínsecamente únicos, siempre es bueno crear un índice UNIQUE en ellos. Esto es menos frecuente en el caso de MySQL, pero los optimizadores más avanzados (SQL Server, por ejemplo) pueden utilizar el hecho de que los datos son únicos y crean un plan más eficiente.

Lee este artículo en mi blog para ver un ejemplo:

+0

Lo siento por mi ignorancia ... LMD? –

Cuestiones relacionadas