Mi domando circa le prestazioni di questo indice:indice colonna con solo 2 valori distinti
Ho un varchar "non valido" (1) colonna che ha 2 valori: NULL o 'Y' ho un indice su (non valido), così come (non valido, last_validated) last_validated è un datetime (questo è usato per un estraneo query SELECT)
sto segnalando una piccola quantità di elementi (1-5%) di righe la tabella con questo come 'da cancellare'.
Questo è così quando ho
DELETE FROM items WHERE invalid='Y'
essa non compie una scansione completa della tabella per le voci non valide.
Un problema sembra essere, il DELETE effettivo è piuttosto lento ora, probabilmente perché tutti gli indici vengono rimossi man mano che vengono eliminati.
Un indice bitmap fornirebbe prestazioni migliori per questo? o forse nessun indice?
Logicamente, sono d'accordo con il punto 1; in pratica, tuttavia, * ci sono * in alcuni casi * significativi vantaggi prestazionali a rappresentare valori non interessanti come NULL in una colonna perché Oracle non memorizza le righe null negli indici - se le query su quella colonna sono quasi sempre solo interessate nei rari valori di 'Y', avere un' Y' non rappresentato come NULL può avere un enorme impatto sulle prestazioni di query, aggiornamenti ed eliminazioni. –
[questo articolo] (https://richardfoote.wordpress.com/2011/08/10/indexing-a-column-with-just-one-distinct-value-all-the-madmen/) conferma più in dettaglio @ Dichiarazione di JeffreyKemp. – GolezTrol