Pregunta
· 21 ene, 2025

¿Índice en campo TimeStamp, o mejor en Date?

Tengo una tabla con un campo TimeStamp. Necesito crearle un índice para mejorar la ejecución de consultas. Pero estoy dándole vueltas a cuál podría ser la mejor opción.

Había pensado en separar el campo TimeStamp en dos campos: Date y Hour, siendo este último un campo Integer que solo almacene la hora, ya que las búsquedas, en realidad, se hacen o solo por fecha, o por fecha y hora, sin contar minutos ni segundos. A estos dos nuevos campos le puedo poner un índice de tipo bitmap, al TimeStamp no. Creo que esto acelera las búsquedas, al menos en el análisis del plan de consulta es lo que aparece.

¿Cuál sería la mejor opción?

  • Crear un índice normal en el campo TimeStamp
  • Crear dos nuevos campos, Date y Hour con índices de tipo bitmap (o normales quizá)
  • Otro?

He hecho varias pruebas y parece que la opción de separarlo en dos campos es la más rápida, pero quería saber vuestra opinión.

Gracias!!

Product version: IRIS 2024.2
Comentarios (4)2
Inicie sesión o regístrese para continuar

Buenos días @Laura Blázquez García !

Los índices sobre campos TimeStamp no suelen ser muy eficientes, ya que son prácticamente equivalentes a un índice de una clave primaria, la principal ventaja de los índices se da cuando los valores de la columna no son únicos, sino que se repiten con cierta frecuencia. En el caso de una fecha y hora estos valores dificilmente se repetirán, por lo que no podrías beneficiarte de la indexación.

De las dos opciones que planteas la separación sería más óptima, pero te recomiendo una tercera: POSIXTIME, este tipo de dato almacena las fechas como valores enteros y tienen un mejor rendimiento en consultas y en almacenamiento, puedes ver más en nuestra documentación aquí

¡Espero que sea de ayuda!

¡Gracias Luis Ángel! Si he entendido bien lo que me recomiendas, sería utilizar el tipo de dato PosixTime en lugar del TimeStamp y crearle un índice normal, no? Pero el rendimiento no sería bueno, por lo que comentabas al comienzo, de que los valores no son únicos, verdad? O en este caso no haría falta índice? (lo probaré de todas formas 😉)

Buenas @Laura Blázquez García , no sería necesario aplicarle un índice al PosixTime, podrías tratarlo como una columna con un valor numérico al uso.

Al fin y al cabo un índice no es más que otra tabla donde se almacena el valor indexado y la referencia a los registros que contienen ese valor, si indexamos una columna de valores únicos nuestra tabla de índice será al final tan grande como nuestra tabla originaria, no obteniendo ninguna ventaja al respecto.