virang_21 Ответов: 0

Почему 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 со всеми столбцами. Если индекс хранит это на листовом уровне, то это сделает обновление и вставку записей в таблицу дорогостоящими. Ищу объяснения тому, что я делаю не так.

0 Ответов