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

Bedste indeks(er) at bruge til en OR-sætning i SQL Server

Et indeks kan ikke bruges på sådan en OR. prøv dette:

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

har et indeks på Due_Amount og et andet på Bounced_Due_Amount.

Det kan være bedre at redesigne dit bord. Uden at kende din forretningslogik eller tabel, vil jeg gætte på, at du kunne have en "Bounced" Y/N eller 1/0 char/bit kolonne og blot en "Due_Amount" kolonne. Tilføj et indeks på det "Due_Amount", og forespørgslen ville bare være:

SELECT * FROM table WHERE Due_Amount > 0

du kan stadig skelne mellem en Bounced eller ikke-række. Dette vil ikke fungere, hvis du skal have både et afvist og ikke-afvist forfaldent beløb på samme tid.



  1. Multiple del og tildel ordre_id

  2. Eksekverbar Java-applikation (JAR) med database pakket inde

  3. Gem GUID i MySQL fra C#

  4. Hvordan indstilles applikationsnavnet i en Postgresql JDBC url?