Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Meilleur(s) index(s) à utiliser pour une instruction OR dans SQL Server

Un index ne peut pas être utilisé sur un OU comme ça. essayez ceci :

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

ont un index sur Due_Amount et un autre sur Bounced_Due_Amount.

Il serait peut-être préférable de repenser votre table. Sans connaître votre logique métier ou votre table, je vais supposer que vous pourriez avoir une colonne "Bounced" Y/N ou 1/0 char/bit et juste une colonne "Due_Amount". Ajoutez un index sur ce "Due_Amount" et la requête serait simplement :

SELECT * FROM table WHERE Due_Amount > 0

vous pouvez toujours différencier une ligne Bounced ou non. Cela ne fonctionnera pas si vous avez besoin d'avoir à la fois un montant dû rebondi et non rebondi en même temps.