Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Gli indici migliori da usare per un'istruzione OR in SQL Server

Un indice non può essere utilizzato su un OR del genere. prova questo:

SELECT * FROM table WHERE Due_Amount > 0
UNION ALL  
SELECT * FROM table Bounced_Due_Amount > 0
--use "UNION" if Due_Amount and Bounced_Due_Amount could both >0 at any one time

avere un indice su Due_Amount e un altro su Bounced_Due_Amount.

Potrebbe essere meglio riprogettare il tuo tavolo. Senza conoscere la tua logica o tabella aziendale, suppongo che potresti avere una colonna "Bounced" Y/N o 1/0 char/bit e solo una colonna "Due_Amount". Aggiungi un indice su quel "Due_Amount" e la query sarebbe semplicemente:

SELECT * FROM table WHERE Due_Amount > 0

potresti ancora distinguere tra una riga rimbalzata o meno. Ciò non funzionerà se è necessario disporre contemporaneamente di un importo dovuto rimbalzato e non rimbalzato.