Помощник по настройке базы данных рекомендует создать существующий индекс
Когда я запускаю помощник по настройке базы данных SQL Server 2005, он дает рекомендацию по созданию индекса, но рекомендует индексировать столбец, в котором уже есть индекс. Почему он дает рекомендацию снова создать тот же индекс?
Вот мой SQL:
SELECT t.name AS 'affected_table'
, 'Create NonClustered Index IX_' + t.name + '_'
+ CAST(ddmid.index_handle AS VARCHAR(10))
+ ' On ' + ddmid.STATEMENT
+ ' (' + IsNull(ddmid.equality_columns,'')
+ CASE
WHEN ddmid.equality_columns IS NOT NULL
AND ddmid.inequality_columns IS NOT NULL
THEN ','
ELSE ''
END
+ ISNULL(ddmid.inequality_columns, '')
+ ')'
+ ISNULL(' Include (' + ddmid.included_columns + ');', ';')
AS sql_statement
, ddmigs.user_seeks
, ddmigs.user_scans
, CAST((ddmigs.user_seeks + ddmigs.user_scans)
* ddmigs.avg_user_impact AS INT) AS 'est_impact'
, ddmigs.last_user_seek
FROM
sys.dm_db_missing_index_groups AS ddmig
INNER JOIN sys.dm_db_missing_index_group_stats AS ddmigs
ON ddmigs.group_handle = ddmig.index_group_handle
INNER JOIN sys.dm_db_missing_index_details AS ddmid
ON ddmig.index_handle = ddmid.index_handle
INNER Join sys.tables AS t
ON ddmid.OBJECT_ID = t.OBJECT_ID
WHERE
ddmid.database_id = DB_ID()
AND CAST((ddmigs.user_seeks + ddmigs.user_scans)
* ddmigs.avg_user_impact AS INT) > 100
ORDER BY
CAST((ddmigs.user_seeks + ddmigs.user_scans)
* ddmigs.avg_user_impact AS INT) DESC;
4 ответа
Может, попробовать "DESC" заказать по-другому?
Это сработало в другом подобном вопросе SO... Почему SQL Server 2005 Dynamic Management View сообщает об отсутствующем индексе, если это не так?
Идите вперед и напишите подробности обоих ваших текущих структур индексов, а затем сравните это с рекомендациями, сделанными DTA.
Я подозреваю, что вы обнаружите структурные различия в результатах.
Возможно, вам придется выполнить ваши запросы и предложить индекс, который уже существует.
SELECT * FROM table WITH INDEX(IX_INDEX_SHOULD_BE_USED) WHERE x = y
Указанный индекс не может считаться полезным для SQL Server. Запустите запрос, который предлагает потребность в индексе и посмотрите путь выполнения в SQL Server, а затем создайте другие необходимые индексы.
Можете ли вы перечислить полный индекс отсутствующего предупреждения? как правило, требуется создать индекс для таблицы, НО только для возврата определенных полей вместо индекса для таблицы, который по умолчанию возвращает все поля.