sql >> Databáze >  >> RDS >> Sqlserver

SQL Server nepoužívá index porovnávající datum a čas s hodnotou není null

To je normální. Nepoužije index, pokud predikát není dostatečně selektivní, aby to odůvodnil.

Zdá se, že naprostá většina záznamů není NULL, takže místo jejich hledání pomocí neshlukovaného indexu je pak rychlejší a efektivnější provádět spoustu vyhledávání záložek a náhodných I/O k načtení zbývajících sloupců. stačí prohledat celý seskupený index.

Můžete použít FORCESEEK vynutit si chování, které říkáte, že chcete. Pravděpodobně zjistíte, že čas strávený a I/O statistiky jsou v porovnání s prohledáváním clusteru indexu nadprůměrné.

SET STATISTICS IO ON

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


  1. DATEDIFF() vs DATEDIFF_BIG() v SQL Server:Jaký je rozdíl?

  2. MYSQL a klauzule LIMIT

  3. Získejte jméno vlastníka DB v PostgreSql

  4. Jak získat jedinečné hodnoty z pole hodnot oddělených čárkou?