2012-02-17 13 views
5

Me pregunto cuál de las siguientes es la mejor manera de implementar y por qué.SQL: Diferencia entre "BETWEEN" vs "current_date - number"

select * from table1 where request_time between '01/18/2012' and '02/17/2012' 

y

select * from table1 where request_time > current_date - 30 
+4

Se prefiere la puerta n. ° 2 porque no es difícil codificar las fechas: D – bernie

+0

En lugar de codificar las fechas, utilizo una variable para eso. Trabajo en Python y uso una variable de fecha y hora allá. Diciendo eso, ¿tendrá prioridad la puerta n. ° 1? – Sri

+0

Estaba siendo demasiado literal y eludía el problema real, de ahí la sonrisa dentuda. Yo uso ambos en diferentes situaciones. No he visto una diferencia de rendimiento perceptible entre los dos. – bernie

Respuesta

2

Entre tiene los rangos inclusivos, es decir, cuando se emite una consulta como identificación entre 2 y 10 el valor de 2 y 10 también será fetched.If desea eliminar estos valores use> y <.

También cuando se aplican índices, decir en la columna de fecha> y < hace un buen uso del índice que entre.

+3

Estoy bastante seguro de que 'BETWEEN' puede hacer el mismo uso de índices que los operadores relacionales. –

+0

Tengo indización en la columna request_time. La tabla obtiene 1-2 millones de registros por día. Usando el segundo enfoque, lleva una eternidad obtener la fecha. – Sri

+0

puede haber diferentes comportamientos para diferentes dbms – Shaheer

4

me corrieron las dos consultas a través de algunos de mis mesas de fecha en mi base de datos y el uso de EXPLIQUE ANALIZAR me encontré con estos resultados:

explain analyze 
select * from capone.dim_date where date between '01/18/2012' and '02/17/2012' 

tiempo de ejecución total: 22.716 ms

explain analyze 
select * from capone.dim_date where date > current_date - 30 

tiempo de ejecución total: 65.044 ms

Parece que la primera opción es más óptima. Por supuesto, esto está sesgado hacia mi DBMS, pero estos siguen siendo los resultados que obtuve.

La tabla tiene fechas que van desde 1900 a 2099 por lo que es bastante grande, y no solo una pequeña mesa pequeña.

Cuestiones relacionadas