Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Странный выбор индекса / 6 сообщений из 6, страница 1 из 1
26.02.2018, 13:13
    #39607278
saszay
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странный выбор индекса
Добрый день!

Есть таблица:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
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]



и запрос:
Код: sql
1.
2.
3.
4.
5.
6.
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.

Почему не используется поиск по кластерному главному ключу?
...
Рейтинг: 0 / 0
26.02.2018, 13:46
    #39607302
Дедушка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странный выбор индекса
добавьте хинтом в запрос использование кластерного как вы хотите и посмотрите какие будут на нём оценки по IO и CPU и сравните с оценками для не кластерного который сервер выбирает.
где меньше?
...
Рейтинг: 0 / 0
26.02.2018, 13:51
    #39607303
felix_ff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странный выбор индекса
saszay ,

У вас таблица RashodL_CurDate маленькая и оптимизатор выбирает предпочтительнее сканирование, либо у вас устаревшая на ней статистика.
...
Рейтинг: 0 / 0
26.02.2018, 14:40
    #39607325
saszay
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странный выбор индекса
Да, таблица маленькая. Не больше 100 записей
...
Рейтинг: 0 / 0
27.02.2018, 11:44
    #39607742
Yasha123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странный выбор индекса
от таблицы RashodL_CurDate нужно только поле ralID,
так зачем лезть в кластерный, в котором все поля,
если есть IX_RashodL_CurDate_usID, в котором тоже есть ralID (это ключ кластерного),
и полей меньше, всего 2: usID + ralID

по этому полю никакой не поиск, просто соединение.
его упорядоченность не нужна.
банально выбирается минимальный индекс, содержащий это поле
...
Рейтинг: 0 / 0
27.02.2018, 11:47
    #39607744
saszay
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странный выбор индекса
Yasha123,

Ясно, спасибо
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Странный выбор индекса / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]