Abbiamo una tabella con più di due milioni di righe in cui tutte le query relative saranno una ricerca tra Column1
e Column2
. Inoltre, ci sarà un solo risultato possibile. Per esempio ...SQL indicizzazione per query Between con una sola corrispondenza?
Col1 Col2
1 5
6 10
11 15
select * from table1 where 8 between Col1 and Col2
Al momento ho un indice cluster univoco su Col1
e Col2
. Finora non sono stato in grado di capire come ottimizzare ulteriormente la query e gli indici per ridurre al minimo le righe gestite. Il piano di esecuzione attualmente riporta il costo di quasi 0,5 e 113k righe gestite quando si individua l'unica risposta corretta.
Quali opzioni potrei trascurare?
Come richiesto, qualche particolare dal piano di esecuzione corrente:
Operation
Clustered Index Seek
Predicate
CONVERT_IMPLICIT(bigint,[@2],0)<=[Col2]
Seek Predicate
Seek Keys[1]: End: Col1 <= Scalar Operator(CONVERT_IMPLICIT(bigint,[@1],0))
Sarebbe utile scrivere come 'seleziona * da tabella1 dove Col1 = < 8 and Col2> = 8' – Vicki
Il passo è sempre 5 in Col1? Se è così allora la risposta è semplice :) –
Che aspetto ha il piano di esecuzione? Potresti aggiungerlo alla domanda? –