Pregunta

Tengo datos de filas de 98W.Cuando quiero ordenar mis datos con pub_time, encontré algo interesante.

Aquí está el SQL:

select * 
from t_p_blog_article_info t  
order by t.pub_time desc

Costa de 19s.

select * 
from t_p_blog_article_info t 
where t.pub_time > to_date( '1900-01-01 01:00:00', 'yyyy-mm-dd   hh24:mi:ss ')  
order by t.pub_time desc

costó 0.2s.

quiero saber, ¿por qué?

¿Fue útil?

Solución

Probablemente tenga un índice en Pub_Time en su mesa.

Por lo tanto, la segunda consulta puede hacer uso de este índice para devolver solo los registros con fechas no nulas después de la fecha especificada, mientras que la primera consulta tiene para consultar la tabla completa.

Otros consejos

Hay una gama de posibilidades. Puede estar filtrando un gran número de filas con fechas inválidas / nulas en Pub_Time, pero dudo que no lo notifiques / mencionar un número significativo de estos.

Las tres cosas que sobresalen en mi mente son:

1 : tiene un índice de índice o compuesto que involucra pub_time, y la restricción en su cláusula WHERE está activando el uso de una ruta de acceso diferente

2 : no tenía estadísticas disponibles para el optimizador cuando tuviste tu primera consulta. Cuando se ejecuta la segunda consulta, se seleccionó una mejor ruta de acceso gracias a algún almacenamiento en caché de información que sucedió cuando pasó la primera consulta. Esto se puede verificar ejecutando la primera consulta unas veces más veces y viendo si hay una mejora significativa de rendimiento.

3 - similar al primer punto, el optimizador podría simplemente seleccionar una mejor ruta de acceso basada únicamente en las implicaciones de la cláusula WHERE. Tal vez dando la sugerencia de que los valores nulos / no válidos no tendrán que ser manejados, su sistema podría evitando que una o más escáneres de la tabla completa para eliminar los pub_times no válidos / nulos.

Pond signando las razones de las cosas como esta se está convirtiendo rápidamente en una empresa empírica: es difícil para mí decir más sin saber su plataforma y versión. Desde la etiqueta, lo tomo, está utilizando Oracle, en cuyo caso debería poder usar algún tipo de herramienta de "explicar consulta" o "explicar plan" para obtener un mejor sentido de lo que está pasando. Para obtener más información sobre Oracle Optimizer, consulte http://docs.oracle .com / CD / B10500_01 / Server.920 / A96533 / OptimOps.htm (Esto es para Oracle 9i V9.2, pero tiene una explicación decente de los conceptos independientes de la versión)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top