Cuando un query tarda mucho tiempo a pesar de que la columna sobre la que se filtra tiene un índice es porque estamos pasando por alto algún detalle.

Hace poco en la oficina estábamos haciendo un query sobre una tabla que tenía poco menos que 1 millón de registros, la cuestión es que a pesar de que la columna sobre la que filtrábamos estaba indexada, la consulta seguía tardando aproximadamente 7 segundos, lo cual mataba nuestra aplicación.

El problema fue causado no por ignorancia, ni por deficiencias en el desempeño del servidor, sino más bien por un descuido, ya que el campo por el que filtraba era de tipo texto y el query lo hacíamos así:

SELECT idcity,idstate,zipcode WHERE zipcode = 33166

El query retornaba resultados validos, pero el problema es que no usaba el índice, pues hacía un casteo debido a que la columna zipcode era de tipo texto y no numérica, así que en vez de recorrer el índice creado sobre la columna de tipo texto, hacía un barrido secuencial, lo cual ralentizaba el query.
El query debió haber sido escrito así:

SELECT idcity,idstate,zipcode WHERE zipcode = '33166'

Esto sucedió como les contaba, debido a un descuido, y no me percaté hasta que revise detalladamente el resultado de un explain del query.

Bueno, para que no les pase a ustedes, es que les recuerdo que tengan mucho cuidado a la hora de escribir un query, y no olviden colocar los apostrofes en los campos de tipo texto.

Saludos, feliz semana!

Deja un comentario