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

SQL Server bruger ikke et indeks, der sammenligner datetime med ikke null

Dette er normalt. Det vil ikke bruge indekset, medmindre prædikatet er selektivt nok til at berettige det.

Det lyder som om, at langt de fleste poster ikke er NULL, så i stedet for at finde disse via det ikke-klyngede indeks, så skal du lave masser af bogmærkeopslag og tilfældige I/O for at hente resten af ​​kolonnerne for at returnere, det er hurtigere og mere effektivt at bare scan hele klyngeindekset.

Du kan bruge FORCESEEK at tvinge den adfærd, du siger, du ønsker. Du vil sandsynligvis opdage, at den tid, det tager og I/O-statistikker går gennem taget sammenlignet med den grupperede indeksscanning.

SET STATISTICS IO ON

SELECT * FROM 
YourTable WITH (FORCESEEK) 
WHERE YourCol IS NOT NULL


  1. SHA256 i T-sql lagret procedure

  2. Find primærnøgle fra én tabel i kommasepareret liste

  3. mySQL - Bordlåsning vs rækkelåsning

  4. Java:com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:Kunne ikke oprette forbindelse til databaseserveren