powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Нужен ли индекс?
4 сообщений из 4, страница 1 из 1
Нужен ли индекс?
    #39660932
Диам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.
Есть такая ситуация:
запрос
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
-- Отсутствующие индексы, вызывающие издержки
SELECT TOP 100 
       [Total Cost] = ROUND(avg_total_user_cost * avg_user_impact * (user_seeks + user_scans),0),
       avg_user_impact,
       TableName = statement,
       [EqualityUsage] = equality_columns,
       [InequalityUsage] = inequality_columns,
       [Include Columns] = included_columns,
       [CreateTxt] = 'CREATE INDEX ' + QuoteName('IX_' + Object_Name(d.object_id,d.database_id) + '_' 
			+ Replace(Replace(Replace(isnull(equality_columns,''),'], [','_'),']',''),'[',''))
			+ ' ON ' + isnull(d.[statement],'') + ' (' + isnull(equality_columns,'') + ')'
			+ ' INCLUDE (' + isnull(d.included_columns,'') + ')'
  FROM sys.dm_db_missing_index_groups g 
	INNER JOIN sys.dm_db_missing_index_group_stats s ON s.group_handle = g.index_group_handle 
	INNER JOIN sys.dm_db_missing_index_details d ON d.index_handle = g.index_handle
  WHERE database_id = DB_ID()
  ORDER BY [Total Cost] DESC;



говорит, что на таблице А отсутствует индекс:

CREATE INDEX [IX_A_Block_Status] ON [CZ_New].[dbo].[A] ([Block], [Status]) INCLUDE ([keyA])

Однако, в базе данных присутствует более широкий индекс
CREATE INDEX [IX_A_Block_Status_Dat] ON [CZ_New].[dbo].[A] ([Block], [Status], [dat]) INCLUDE ([keyA])

И если выполнять запрос
Код: sql
1.
2.
3.
SELECT A.keyA
FROM A
WHERE Block=2 AND Status=3



то план запроса показывает, что происходит IndexSeek по индексу IX_A_Block_Status_Dat

Вопрос - нужен ли индекс IX_A_Block_Status или же достаточно индекса IX_A_Block_Status_Dat ?
Если достаточно, то почему запрос запрос говорит, что именно он нужен?
...
Рейтинг: 0 / 0
Нужен ли индекс?
    #39660938
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Диам,

"на заборе тоже много чего написано, я заглядывала - там только дрова"(с) (какой-то старый анекдот)

не нужно слепо верить даже тому, что выдает оптимизатор / профайлер (не говоря уже про подозрительные скрипты из непонятного источника). Любые рекомендации - они, именно что, рекомендации. Применять их или нет - решает не скрипт, а человек. Вам лишь дали пищу для размышления. А нужно оно или нет - решать только вам. Тут нужно смотреть на состав данных, их распределение и характер обработки (соотношение операций DML и обычных SELECT), а также - на полный набор запросов, которые потенциально могут использовать новый индекс. НА крайний случай - сделайте пару вариантов индекса и посмотрите на статистику их использования. Вполне может оказаться, что оба будут использоваться интенсивно. Либо наоборот - оба индекса окажутся малопригодными и редкоиспользуемыми...
...
Рейтинг: 0 / 0
Нужен ли индекс?
    #39660977
Фотография Дедушка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Диам,

более широкий индекс "хуже" тем, что он шире :) больше читать нужно.
оптимизатор конечно хочет более оптимальный (узкий).
то что идёт поиск по существующему... ну, дак, а чего бы ему не идти на таком запросе.

если создадите такой какой просят увидите, что в плане используется уже он (с меньшим IO).
другое дело, что реальный профит может быть практически не заметен (зависит от ваших данных).

если широкий построен не просто так, а используется в других запросах, то может статься,
что оставить только его будет правильно (меньше индексов - меньше накладных расходов)
смотрите весь набор запросов на таблицу
...
Рейтинг: 0 / 0
Нужен ли индекс?
    #39661062
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Диам,

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


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