Univa stima dei costi e selezione indice

Poiché l'ottimizzatore della query confronta le varie possibili scelte di accesso, deve assegnare un valore di costo numerico a ciascun candidato. L'ottimizzatore utilizza tale valore per determinare l'implementazione che consuma il minor tempo di elaborazione. Questo valore di costing è una combinazione di CPU e tempo I/O

Nei passi 3 e 5 in Join order optimization, le stime dell'ottimizzatore costano e sceglie un metodo di accesso per una determinata combinazione di composizione. Le scelte fatte sono come le scelte per la selezione delle righe, tranne che un piano che utilizza una sonda deve essere scelto.

Il valore di costing si basa sulle seguenti ipotesi:
  • Le pagine di tabella e le pagine di indice devono essere richiamate dalla memoria ausiliaria. Ad esempio, il programma di ottimizzazione query non riconosce che un'intera tabella potrebbe essere caricata nella memoria attiva come risultato di un comando CL Set Object Access (SETOBJACC) . L'utilizzo di questo comando potrebbe migliorare sensibilmente le prestazioni di una query. Tuttavia, l'ottimizzatore non modifica l'implementazione della query per usufruire dello stato di memoria residente della tabella.
  • La query è l'unico processo in esecuzione sul sistema. Non viene concessa alcuna indennità per l'utilizzo della CPU di sistema o le attese I/O che si verificano a causa di altri processi che utilizzano le stesse risorse. I costi relativi alla CPU sono scalati alla velocità di elaborazione relativa del sistema che esegue la query.
  • I valori in una colonna sono uniformemente distribuiti su tutta la tabella. Ad esempio, se il 10% delle righe della tabella ha lo stesso valore, allora in media ogni 10° riga della tabella contiene quel valore.
  • I valori della colonna sono indipendenti da qualsiasi altro valore di colonna in una riga, a meno che non vi sia un indice disponibile la cui definizione chiave è (A, B). Gli indici di campo multi - chiave consentono all'ottimizzatore di rilevare quando i valori tra le colonne sono correlati.

    Ad esempio, una colonna denominata A ha un valore di 1 in 50% delle righe in una tabella. Una colonna denominata B ha un valore di 2 in 50% delle righe. Si prevede che una query che seleziona righe dove A = 1e B = 2 seleziona 25% delle righe in tavola.

I principali fattori nel calcolo del costo di unione per i diari secondari sono:
  • il numero di righe selezionate in tutti i precedenti
  • il numero di righe che corrispondono, in media, a ciascuna delle righe selezionate dai precedenti.
Entrambi questi fattori possono essere ricavati stimando il numero di righe corrispondenti per un determinato comodino.
Quando l'operatore di unione è qualcosa di diverso da uguale, il numero previsto di righe corrispondenti si basa sui seguenti fattori di filtro predefiniti:
  • 33% per meno - di - più - di - uguale - a - pari o superiore - a - pari - a
  • 90% per non uguale
  • 25% per BETWEEN range (OPNQRYF %RANGE)
  • 10% per ogni valore di elenco IN (OPNQRYF %VALUES)

Ad esempio, quando l'operatore di unione è minore di, il numero previsto di righe corrispondenti è 0.33 * (numero di righe nel quadrante). Se non sono attive specifiche di unione per il dial corrente, il prodotto Cartesiano viene assunto come operatore. Per i prodotti Cartesiani, il numero di righe corrispondenti è ogni riga nel comietto, a meno che la selezione della riga locale non possa essere applicata all'indice.

Quando l'operatore di unione è uguale, il numero previsto di righe è il numero medio di righe duplicate per un determinato valore.