Domanda

Ho dati di righe da 98W.Quando voglio ordinare i miei dati con pub_time, ho trovato un interesse.

Ecco l'SQL:

select * 
from t_p_blog_article_info t  
order by t.pub_time desc
.

costa 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
.

Costa 0.2s.

Voglio sapere, perché?

È stato utile?

Soluzione

Probabilmente hai un indice su PUB_Time sul tuo tavolo.

Pertanto, la seconda query può utilizzare questo indice per restituire solo i record con date non nullo dopo la data specificata, mentre la prima query deve interrogare l'intera tabella.

Altri suggerimenti

Ci sono una serie di possibilità. Potresti filtrare un gran numero di righe con date non valide / null in PUB_TUE, ma dubito che non avresti mancato di notare / menzionare un numero significativo di questi.

Le tre cose che si attaccano nella mia mente sono:

1 - Hai un indice o un indice composito che coinvolge PUB_TUE e la restrizione nella vostra clausola in cui si attiva l'uso di un percorso di accesso diverso

2 - Non hai avuto statistiche disponibili per l'ottimizzatore quando hai eseguito la tua prima query. Quando si esegue la seconda query è stato selezionato un percorso di accesso migliore grazie ad alcune informazioni nella cache che è accaduta quando si esegue la prima query. Questo può essere verificato eseguendo la prima query alcune volte e vedendo se c'è un significativo miglioramento delle prestazioni.

3 - Simile al primo punto, l'ottimizzatore potrebbe semplicemente selezionare un percorso di accesso migliore basato esclusivamente sulle implicazioni della clausola WHERE. Forse dando il suggerimento che i valori nulli / non validi non dovranno essere gestiti è sufficiente: il tuo sistema potrebbe evitare una o più scansioni di tabella completa all'erbacciata non valida / null pub_times.

Pinicando le ragioni per cose come questo sta rapidamente diventando una venture empirica - è difficile per me dire di più senza conoscere la tua piattaforma e la tua versione. Dal tag lo prendo, stai usando Oracle, nel qual caso dovresti essere in grado di utilizzare una qualche forma di "Spiega la query" o "Spiegare lo strumento Plan" per ottenere un miglior senso di cosa sta succedendo. Per ulteriori informazioni su Oracle Optimizer, vedere http://docs.oracle .com / cd / b10500_01 / server.920 / A96533 / Optimops.htm (questo è per Oracle 9i V9.2, ma ha una spiegazione decente dei concetti indipendenti dalla versione)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top