Encontré algo extraño mientras ejecutaba la consulta hoy y quiero saber cómo sucede esto.
A continuación se muestra mi consulta:
select sum(price) as total from table_a where testing_date = '2020-06-10'esta consulta tarda de 2 a 5 segundos mientras busca los datos. Ahora hice un pequeño cambio en la consulta de la siguiente manera:
select sum(price) as total from table_a where date(testing_date) = '2020-06-10'En este caso, la consulta tarda de 2 a 3 minutos. Aquí los datos de la columna testing_date en formato dateTime, por ejemplo: 2020-06-01 00:00:00
Aquí el tamaño total de los registros es más de 7 millones.
No use una función en la columna en la que filtra. Esto hace que la consulta no sea SARGeable, lo que significa que la base de datos no puede aprovechar un índice existente. Básicamente, está obligando a la base de datos a realizar el cálculo en todos y cada uno de los valores de la columna antes de que se produzca el filtrado.
Si desea filtrar en un día determinado, puede usar desigualdades con intervalos semiabiertos:
where testing_date >= '2020-06-10' and testing_date < '2020-06-11'