sql >> Databasteknik >  >> RDS >> Sqlserver

SQL Server använder inte ett index som jämför datetime med inte null

Det här är normalt. Det kommer inte att använda indexet om inte predikatet är tillräckligt selektivt för att motivera det.

Det låter som att de allra flesta poster inte är NULL så istället för att hitta dessa via det icke-klustrade indexet och sedan behöva göra massor av bokmärkessökningar och slumpmässiga I/O för att hämta resten av kolumnerna för att returnera det är snabbare och effektivare att skanna bara hela klustrade indexet.

Du kan använda FORCESEEK att tvinga fram det beteende som du säger att du vill. Du kommer sannolikt att upptäcka att tiden som det tar och I/O-statistiken går igenom taket jämfört med den klustrade indexskanningen.

SET STATISTICS IO ON

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


  1. Kan en främmande nyckel referera till ett icke-unikt index?

  2. Hur man själv uppdaterar PHP+MySQL CMS?

  3. SSIS konverterar Varchar2 till DT_STR

  4. En introduktion till datautvinning