Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

optimizando indices

Estas en el tema de optimizando indices en el foro de Mysql en Foros del Web. Hola gente, tengo esta duda y parece que nos esta acusando problemas: tengo 3 tablas con algunos millones de registros relacionados. y lo que veo ...
  #1 (permalink)  
Antiguo 02/07/2014, 15:13
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 9 meses
Puntos: 288
optimizando indices

Hola gente,
tengo esta duda y parece que nos esta acusando problemas:
tengo 3 tablas con algunos millones de registros relacionados.

y lo que veo en sus estructuras es que muchos de sus indices son de tipo varchar y a la vez INDEX.

La pregunta es si es mejor que los campos de tipo varchar sean FULLTEXT en vez de INDEX?
  #2 (permalink)  
Antiguo 02/07/2014, 15:43
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: optimizando indices

No te confundas. INDEX y FULLTEXT son tipos de indice, VARCHAR es un tipo de columna.
Son cosas diferentes.

Para que se entienda mejor: Lo que ves en la definición del la tabla, que expresa INDEX, le dice a MySQL que debe crear un índice estandar, que es un indice de tipo B-Tree. Pero eso no es un tipo de columna.
Un índice INDEX puede ser creado sobre cualquier tipo de columna, en cambio un índice FULLTEXT es un indice de colecciones, que forzosamente debe ser creado sobre columnas de tipo texto, como VARCHAR, y sólo desde MySQL 5.6.3 aplica a tablas InnoDB. Antes sólo se usaban con las MyISAM..
Ahora bien, la performance de un indice INDEX dependerá mucho de la selectividad de los valores de la clave, que dependerán de TU tabla y de TUS datos. No hay un estandar. Se debe analizar en el caso específico.
Lo que sí te puedo aconsejar de entrada es no hacer consultas del tipo LIKE '%palabra%', porque usar asteriscos en ambos lados del valor ahce que MySQL descarte el índice y lea la tabla completa. Y eso es el peor escenario.
Por su lado los índices FULLTEXT son muy útiles, pero sólo si haces búsqueda con MATTCH() AGAINST(), las cuales sólo aplican a palabras completas, y no partes de palabras.

En definitiva, hay mucho por hablar cuando tratamos con performance de indices.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 02/07/2014 a las 17:20
  #3 (permalink)  
Antiguo 03/07/2014, 08:34
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 9 meses
Puntos: 288
Respuesta: optimizando indices

no sabia todas esas cosas. gracias por la info
voy a ver de aplicar estos consejos

Etiquetas: campo, indices, registro, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:45.