Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Beste Indizes für eine OR-Anweisung in SQL Server

Ein Index kann auf einem solchen OR nicht verwendet werden. versuchen Sie Folgendes:

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

haben einen Index auf Due_Amount und einen anderen auf Bounced_Due_Amount.

Es könnte besser sein, Ihren Tisch neu zu gestalten. Ohne Ihre Geschäftslogik oder Tabelle zu kennen, gehe ich davon aus, dass Sie eine "Bounced" Y/N- oder 1/0-Zeichen/Bit-Spalte und nur eine "Due_Amount"-Spalte haben könnten. Fügen Sie einen Index für diesen "Due_Amount" hinzu und die Abfrage wäre einfach:

SELECT * FROM table WHERE Due_Amount > 0

Sie können immer noch zwischen einer gesprungenen oder einer nicht gesprungenen Zeile unterscheiden. Dies funktioniert nicht, wenn Sie gleichzeitig einen zurückgebuchten und einen nicht zurückgebuchten fälligen Betrag benötigen.