Помощник по настройке базы данных рекомендует создать существующий индекс - PullRequest
4 голосов
/ 11 июля 2009

Когда я запускаю помощник по настройке базы данных 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 ]

7 голосов
/ 11 июля 2009

Может, попробовать "DESC" заказать другим способом?

Это сработало в другом аналогичном вопросе SO ... Почему SQL Server 2005 Dynamic Management View сообщает об отсутствующем индексе, если его нет?

0 голосов
/ 12 июля 2009

Идите вперед и напишите детали вашего текущего списка индексов, а затем сравните это с рекомендациями, сделанными DTA.

Я подозреваю, что вы обнаружите структурные различия в результатах.

0 голосов
/ 11 июля 2009

Можете ли вы перечислить полный индекс отсутствующего предупреждения? обычно требуется создать индекс для таблицы, НО только для возврата определенных полей вместо индекса для таблицы, который по умолчанию возвращает все поля.

0 голосов
/ 11 июля 2009

Вам может потребоваться выполнить ваши запросы и предложить индекс, который уже существует.

SELECT * FROM table WITH INDEX(IX_INDEX_SHOULD_BE_USED) WHERE x = y

Указанный индекс не может считаться полезным для SQL Server. Запустите запрос, который предлагает необходимость индекса, и посмотрите путь выполнения в SQL Server, а затем создайте другие необходимые индексы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...