Каждый индекс будет отдельным - нет перекрестных ссылок и так далее.Так что да, если эти индексы являются дубликатами, вы можете потерять время.Но: вполне разумно включать один столбец в несколько индексов - например, составные индексы (несколько полей) и т. Д. Может иметь смысл присутствовать рядом.
SQL Server с 2005 года имеетдействительно хорошая функция под названием DMV (Dynamic Management View), которая позволяет проверять, не используются ли индексы
- вообще
- отсутствующие индексы, которые могут ускорить загрузку вашего запроса
Поиск отсутствующих индексов:
SELECT
object_name(object_id), d.*, s.*
FROM
sys.dm_db_missing_index_details d
INNER JOIN
sys.dm_db_missing_index_groups g ON d.index_handle = g.index_handle
INNER JOIN
sys.dm_db_missing_index_group_stats s ON g.index_group_handle = s.group_handle
WHERE
database_id = db_id()
ORDER BY
object_id
Поиск неиспользуемых индексов:
DECLARE @dbid INT
SELECT @dbid = DB_ID(DB_NAME())
SELECT
OBJECTNAME = OBJECT_NAME(I.OBJECT_ID),
INDEXNAME = I.NAME,
I.INDEX_ID
FROM
SYS.INDEXES I
JOIN
SYS.OBJECTS O ON I.OBJECT_ID = O.OBJECT_ID
WHERE
OBJECTPROPERTY(O.OBJECT_ID, 'IsUserTable') = 1
AND I.INDEX_ID NOT IN (SELECT S.INDEX_ID
FROM SYS.DM_DB_INDEX_USAGE_STATS S
WHERE S.OBJECT_ID = I.OBJECT_ID
AND I.INDEX_ID = S.INDEX_ID
AND DATABASE_ID = @dbid)
ORDER BY
OBJECTNAME, I.INDEX_ID, INDEXNAME ASC