Ir al contenido


Foto

La importancia de los índices


  • Por favor identifícate para responder
3 respuestas en este tema

#1 jorgeu

jorgeu

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 179 mensajes
  • LocationMaracaibo

Escrito 27 octubre 2010 - 02:49

Hace dos años que hice un sistema que se ejecuta en un servidor dedicado.

Dicha aplicación necesita ejecutar una misma consulta cada 1 minuto.

El problema es que tardaba aproximadamente 40 segundos y el proceso mysql consumía casi todos los recursos del servidor.

La consulta abarcaba un join entre 3 tablas y en la tercera había un campo utilizado como booleano (verdadero/falso) y se preguntaba por el valor de este en el where.

Resulta que ese campo lo creé mucho después que se pasó a producción el sistema y cuando quise crear un índice la operación no terminaba porque habían decenas de millones de registros. Al cambiar las políticas de tiempo de datos en la tabla (pues ahora sólo se tienen los últimos 3 meses) sí pude crear el índice sobre ese campo. Lo creé tipo hash y ahora la consulta tarda menos de 1 segundo.

Un recordatorio de que se debe insistir en la optimización de nuestras bases de datos  (y)

No hace mucho no se disponía de índices con el engine myISAM. Todo esto fue gracias a InnoDB.

Larga vida a InnoDB!  :)
  • 0

#2 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.409 mensajes
  • LocationRepública Dominicana

Escrito 28 octubre 2010 - 10:19

Ah vaya, y eso que utilizo MyISAM, gracias por la nota mi estimado (y)
  • 0

#3 jorgeu

jorgeu

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 179 mensajes
  • LocationMaracaibo

Escrito 28 octubre 2010 - 10:29

Ah vaya, y eso que utilizo MyISAM, gracias por la nota mi estimado (y)


Curioso que antes de InnoDB consideraba a MySQL un juguete que la gente mal usaba. Ahora la situación es parecida porque a pesar de disponer de este potente motor mucha gente sigue usando MyISAM.

Me han llamado para optimizar sitios Web que va muy lentos y todo ha caminado muy bien tan sólo cambiando al engine InnoDB y creando los foreign keys que a su vez crean índices Btree implícitos. Con eso es suficiente en la mayoría de los casos.
  • 0

#4 fredycc

fredycc

    Advanced Member

  • Moderadores
  • PipPipPip
  • 874 mensajes
  • LocationOaxaca, México

Escrito 28 octubre 2010 - 12:22

Creo reelevante los índices en caulquier estructura de base de datos, en lo particular no he utilizado mysql, solo firebird, interbase, ms sqlserver y sqlite; en todos ellos la importancia de estos es reelevante pues puedes verlo en los distintos analizadores de consultas y teimpos de ejecución; embarcadero tiene uno muy interesante de momento no recuerdo el nombre, q además optimiza querys muy complejos.

Tuve un proyecto con Windows Mobile, donde cargamos todos los códigos postales de México, incluidos, estados, municipios y sus localidades, solo los que contaban con código postal aclaro. Y de ahí realizabamos busquedas en el dispositivo para registrar datos, los indices me permitieron ejecutar consultas en un tiempo muy razonable en tales dispositivos, les puedo decir que los datos eran considerables.

Saludos.


  • 0