Ver Mensaje Individual
  #3 (permalink)  
Antiguo 03/11/2014, 08:28
ricardobit
 
Fecha de Ingreso: noviembre-2014
Mensajes: 7
Antigüedad: 9 años, 6 meses
Puntos: 1
Respuesta: Optimización de una tabla, ¿influye el orden de las columnas? ¿las indexo?

Muchas gracias Quim, creo que con sólo decirme que el índice sobre la id es inútil, me has aclarado ya un montón de cosas que había leído en los últimos días y no había forma de comprender. Mi error ha sido pensar que la columna id era obligatoria.

(he tenido que buscar que era PK, para quién no lo sepa como yo, significa Primary Keyword) :P


Voy a hacer lo que comentas, crear un índice UNIQUE sobre apellido, para asegurarme que no hayan repeticiones.

En tu segundo enlace, http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html (que por cierto es genial) comentan lo siguiente:

-------------------------
For example, if you have a three-column index on (col1, col2, col3), you have indexed search capabilities on (col1), (col1, col2), and (col1, col2, col3).

MySQL cannot use an index if the columns do not form a leftmost prefix of the index. Suppose that you have the SELECT statements shown here:

SELECT * FROM tbl_name WHERE col1=val1;
SELECT * FROM tbl_name WHERE col1=val1 AND col2=val2;

SELECT * FROM tbl_name WHERE col2=val2;
SELECT * FROM tbl_name WHERE col2=val2 AND col3=val3;

If an index exists on (col1, col2, col3), only the first two queries use the index. The third and fourth queries do involve indexed columns, but (col2) and (col2, col3) are not leftmost prefixes of (col1, col2, col3).
-------------------------

Ya sólo me queda una duda:

¿Siguiendo el ejemplo de dev.mysql.com, debería crear índices tipo (col1), (col2), (col3), (col1, col2), (col1, col3), (col2, col3) y (col1, col2, col3)?

En mi caso:
(Apellido)
(numletras)
(inicio)
(final)
(letraras)
(Apellido, numletras)
(Apellido, inicio)
(Apellido, final)
(Apellido, letraras)
(Apellido, numletras, inicio)
(Apellido, numletras, final)
(Apellido, numletras, letraras)
... etc... hasta llegar a:
(Apellido, numletras, inicio, final, letraras)

¿O es una barbaridad crear índices para cada columna y sus variantes?

¿O según tu experiencia, es mejor olvidarme de todo y hacer sólo una columna (Apellido) indexada como UNIQUE y trabajar sólo con ella?

La tabla de apellidos no se actualizará una vez creada (sólo es de lectura) y es posible que tenga un volumen enorme de consultas tipo SELECT-FROM-WHERE, con picos que podrían llegar a 10 consultas por segundo.

No sabes cuanto te lo agradezco. Con lo bien que se me da programar, con las BBDD me siento muy torpe y me cuesta entender sus conceptos.

Muchas gracias por tu atención.