Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL Server не използва индекс, сравняващ datetime с not null

Това е нормално. Той няма да използва индекса, освен ако предикатът не е достатъчно селективен, за да го гарантира.

Изглежда, че по-голямата част от записите не са NULL, така че вместо да ги намирате чрез неклъстъриран индекс, тогава трябва да правите купища търсения на отметки и произволен I/O, за да извлечете останалите колони, за да ги върнете, е по-бързо и по-ефективно да просто сканирайте целия клъстерен индекс.

Можете да използвате FORCESEEK да принудите поведението, което казвате, че искате. Вероятно ще откриете, че необходимото време и статистиката за I/O преминават през покрива в сравнение със сканирането на клъстерен индекс.

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. Най-добрият начин за улавяне на нарушения на уникалните ограничения на sql в C# по време на вмъквания

  2. Използване на UDF за стойност по подразбиране на колона

  3. Защо ISNUMERIC(',') е вярно?

  4. Изходният параметър на съхранена процедура връща @Value

  5. @@DATEFIRST – Вземете първия ден от седмицата в SQL Server