sql >> Database >  >> RDS >> Sqlserver

SQL Server gebruikt geen index die datetime vergelijkt met niet null

Dit is normaal. Het zal de index niet gebruiken tenzij het predikaat selectief genoeg is om het te rechtvaardigen.

Het klinkt alsof de overgrote meerderheid van de records niet NULL zijn, dus in plaats van deze te vinden via de niet-geclusterde index, moet je veel bladwijzerzoekopdrachten en willekeurige I/O uitvoeren om de rest van de kolommen op te halen om terug te keren, het is sneller en efficiënter om scan gewoon de hele geclusterde index.

U kunt FORCESEEK . gebruiken om het gedrag te forceren dat u zegt dat u wilt. U zult waarschijnlijk merken dat de tijd die nodig is en de I/O-statistieken door het dak gaan in vergelijking met de geclusterde indexscan.

SET STATISTICS IO ON

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


  1. Hoe voeg ik een tijdquery toe in Oracle?

  2. Geavanceerde (?) EN / OF-query

  3. PHP PDO MySQL en hoe gaat het echt om met MySQL-transacties?

  4. Kan het door Oracle beheerde stuurprogramma async/wait correct gebruiken?