Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Странный выбор индекса  [new]
saszay
Member

Откуда: Тольятти
Сообщений: 454
Добрый день!

Есть таблица:
CREATE TABLE [dbo].[RashodL_CurDate](
	[ralID]      [bigint]   NOT NULL,
	[ralCurDate] [datetime] NOT NULL CONSTRAINT [DF_RashodL_CurDate_ralInDate]  DEFAULT (getdate()),
	[usID]       [smallint] NOT NULL,
 CONSTRAINT [PK_RashodL_CurDate] PRIMARY KEY CLUSTERED 
    ([ralID] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]
) ON [PRIMARY]

CREATE NONCLUSTERED INDEX [IX_RashodL_CurDate_usID] ON [dbo].[RashodL_CurDate]
  ([usID] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 99) ON [PRIMARY]

ALTER TABLE [dbo].[RashodL_CurDate]  WITH CHECK ADD  CONSTRAINT [FK_RashodL_CurDate_RashodL] FOREIGN KEY([ralID]) REFERENCES [dbo].[RashodL] ([ID])
    ON DELETE CASCADE
ALTER TABLE [dbo].[RashodL_CurDate] CHECK CONSTRAINT [FK_RashodL_CurDate_RashodL]

ALTER TABLE [dbo].[RashodL_CurDate]  WITH CHECK ADD  CONSTRAINT [FK_RashodL_CurDate_Users] FOREIGN KEY([usID]) REFERENCES [dbo].[Users] ([ID])
ALTER TABLE [dbo].[RashodL_CurDate] CHECK CONSTRAINT [FK_RashodL_CurDate_Users]


и запрос:
DECLARE @shID  tinyint = 1;
SELECT RashodL.ID As ralID, ralNomer, otAPB, otName, RashodL.usID, ISNULL(RashodL.usIDPlat, 0) AS usIDk
    FROM RashodL WITH(noLock)
        INNER JOIN RashodL_CurDate ON RashodL.ID = RashodL_CurDate.ralID
        INNER JOIN   Otdel WITH(noLock) ON RashodL.otID = Otdel.ID
WHERE RashodL.shID = @shID;


При построении плана выполнения запроса используется просмотр индекса IX_RashodL_CurDate_usID.

Почему не используется поиск по кластерному главному ключу?

К сообщению приложен файл (plan.sqlplan - 36Kb) cкачать
26 фев 18, 13:13    [21218664]     Ответить | Цитировать Сообщить модератору
 Re: Странный выбор индекса  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5111
добавьте хинтом в запрос использование кластерного как вы хотите и посмотрите какие будут на нём оценки по IO и CPU и сравните с оценками для не кластерного который сервер выбирает.
где меньше?
26 фев 18, 13:46    [21218825]     Ответить | Цитировать Сообщить модератору
 Re: Странный выбор индекса  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1369
saszay ,

У вас таблица RashodL_CurDate маленькая и оптимизатор выбирает предпочтительнее сканирование, либо у вас устаревшая на ней статистика.
26 фев 18, 13:51    [21218845]     Ответить | Цитировать Сообщить модератору
 Re: Странный выбор индекса  [new]
saszay
Member

Откуда: Тольятти
Сообщений: 454
Да, таблица маленькая. Не больше 100 записей
26 фев 18, 14:40    [21219009]     Ответить | Цитировать Сообщить модератору
 Re: Странный выбор индекса  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
от таблицы RashodL_CurDate нужно только поле ralID,
так зачем лезть в кластерный, в котором все поля,
если есть IX_RashodL_CurDate_usID, в котором тоже есть ralID (это ключ кластерного),
и полей меньше, всего 2: usID + ralID

по этому полю никакой не поиск, просто соединение.
его упорядоченность не нужна.
банально выбирается минимальный индекс, содержащий это поле
27 фев 18, 11:44    [21221243]     Ответить | Цитировать Сообщить модератору
 Re: Странный выбор индекса  [new]
saszay
Member

Откуда: Тольятти
Сообщений: 454
Yasha123,

Ясно, спасибо
27 фев 18, 11:47    [21221250]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить