Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

SQL Server nie używa indeksu porównującego datetime do not null

To normalne. Nie użyje indeksu, chyba że predykat jest wystarczająco selektywny, aby to uzasadnić.

Wygląda na to, że zdecydowana większość rekordów nie ma wartości NULL, więc zamiast szukać ich za pomocą indeksu nieklastrowanego, trzeba wykonywać mnóstwo wyszukiwań zakładek i losowych operacji we/wy, aby pobrać pozostałe kolumny w celu zwrócenia, jest to szybsze i bardziej wydajne po prostu zeskanuj cały indeks klastrowy.

Możesz użyć FORCESEEK aby wymusić zachowanie, o którym mówisz, że chcesz. Prawdopodobnie okaże się, że czas potrzebny i statystyki we/wy przebijają się przez dach w porównaniu ze skanowaniem indeksu klastrowego.

SET STATISTICS IO ON

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. konwersja typu danych varchar na typ danych datetime spowodowała otrzymanie wartości spoza zakresu

  2. Cross Join „n” razy przy stole

  3. Najlepszy sposób tworzenia indeksów w SQL Server

  4. Różnica czasu między datami zakończenia pierwszych rekordów a datami następnego rekordu

  5. 4 niesamowite zasoby monitorowania SQL Server dla administratorów baz danych