Почему SQL server не использует определенный индекс ?
У меня есть таблица, содержащая около 400 000 записей. Есть первичный ключ, и я создал индекс на одном столбце. Я попробовал запустить запрос и проверил план выполнения, но MSSQL-сервер не использует определенный индекс. Я пробовал несколько вариантов создания индекса, и единственный раз, когда он использует индекс, - это когда я определяю его с помощью предложения INCLUDE с остальными столбцами. Почему это так ? Я что-то упустил ? Запрос запускается из приложения C#, поэтому я не хочу указывать подсказку use index.
CREATE TABLE [dbo].[LockJobs]( [RecordId] [int] IDENTITY(1,1) NOT NULL, [SystemNo] [varchar](50) NOT NULL, [JobNo] [varchar](50) NOT NULL, [KeyNo] [varchar](50) NULL, [PickSlipNo] [varchar](50) NULL, [DebtorAcc] [varchar](50) NULL, [DateTimeCreated] [datetime] NULL, CONSTRAINT [PK_LockJobs_1] PRIMARY KEY CLUSTERED ( [RecordId] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]
RecordId-это первичный ключ, поэтому на нем есть кластеризованный индекс. Я создал еще один индекс в системе No. С точки зрения данных системный номер может иметь много номеров заданий. SQL-запрос, который я пытаюсь выполнить, выглядит следующим образом.
select * from LockJobs where SystemNo='S60175' ORDER BY JobNo -- ( No of records returned = 27000 ) 1> create index INDX_LockJob on LockJobs(SystemNo) -- SQL does not use it when running above query. 2> create index INDX_LockJob on LockJobs(SystemNo) INCLUDE([JobNo])-- SQL does not use it when running above query. 3>create index INDX_LockJob on LockJobs(SystemNo) INCLUDE([RecordId],[JobNo],[KeyNo],[PickSlipNo],[DebtorAcc],[DateTimeCreated]) -- SQL uses the created index.
Что я уже пробовал:
Пробовал создавать различные варианты индекса. Это работает только при использовании INCLUDE со всеми столбцами. Если индекс хранит это на листовом уровне, то это сделает обновление и вставку записей в таблицу дорогостоящими. Ищу объяснения тому, что я делаю не так.