Domanda

Attualmente sto cercando di ottimizzare alcuni rapporti BOBJ dove il nostro back-end è Teradata. Il Teradata ottimizzatore sembra molto pignolo e mi chiedevo se qualcuno ha messo a punto un soluzione o una soluzione per ottenere l'ottimizzatore di trattare le piace in una materia simile a uguale .

My issue is that we allow the user to input one of two methods:
 1. Enter the Number:
    or
 2. Enter a Number like:

Option One funziona come un sogno, mentre l'opzione due sta trascinando i nostri tempi di query da 6 secondi a 2 minuti.

In aggiunta a questo; Qualcuno sa di eventuali buoni articoli, discussioni, vidoes, ecc .. sull'ottimizzazione istruzioni SQL per l'ottimizzatore Teradata?

È stato utile?

Soluzione

Poiché la colonna è definito come VARCHAR e si utilizza l'operatore LIKE si elimina la possibilità di utilizzare il PI per l'accesso singolo AMP. Ricorda, l'indici primari primo lavoro sta distribuendo i dati attraverso gli amplificatori nel sistema. Poiché si utilizza l'operatore LIKE contro il PI l'ottimizzatore deve eseguire un'operazione 'all AMP' per soddisfare l'operatore LIKE.

WHERE MyPIColumn LIKE '123%'

Il hash di valori che iniziano con 123 e può finirà su più AMP.

WHERE MyPIColum = '123'

L'hash di 123 posizionerà ogni singolo record sulla stessa AMP. Interrogazione per '123' sarà sempre una sola operazione AMP.

Le statistiche su questo può aiutare con le stime di fila, ma probabilmente non eliminare l'operazione 'tutta AMP'.

  1. Si tratta di un unico PI o non-Unique PI?
  2. Perché è stato il tipo di dati scelto di essere personaggio sopra numerica? Anche se GT (E) o LT (E) sarebbe probabilmente comportare la stessa operazione 'All-AMP''.
  3. È questo PI condivisa da altre tabelle il modello per facilitare AMP locali aderire a strategie?

Altri suggerimenti

mi piacerebbe prendere quel numero è indicizzato? Teradata usi hashing per l'indicizzazione, così uguali risulteranno nell'indice utilizzati, mentre come si tradurrà in una scansione completa della tabella.

Se si dispone di una vera e propria necessità per l'utilizzo come, non c'è un sacco che si può fare. Una cosa che si può provare è utilizzare Substr(Number, 1, 3) = '123' piuttosto che Number LIKE '123%'. Ho ottenuto piccoli miglioramenti delle prestazioni di questo in passato, ma non mi aspetto nulla di spettacolare.

È necessario un / index pre-token indice full-text, per esempio Lucene, e anche una ricerca di due analisi.

es. Quando si inserisce una "12345" per il database, creare un link da "1", "12", "123", "234" ... ecc per "12345".

Poi, quando l'uso trovare qualcosa come "123 **", trova "123" dalla tabella di ricerca e la cercano al record "12345"

Se si sta facendo un confronto diretto VARCHAR, vale a dire

Column LIKE 'VALUE'

allora si potrebbe provare a utilizzare un Nusi su quella colonna. Assicurarsi che si raccolgono le statistiche per l'indice principale della tavola e per l'indice

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