Оптимизация производительности базы данных имеет решающее значение для обеспечения эффективного выполнения запросов и повышения общей производительности приложений. Одной из распространенных областей, которая может существенно повлиять на производительность, является наличие отсутствующих индексов в базе данных SQL Server. В этой статье мы рассмотрим различные методы выявления отсутствующих индексов с использованием динамических представлений управления (DMV) в SQL Server, за исключением DMV, связанного с индексами «спа».
Метод 1: sys.dm_db_missing_index_details
Одним из наиболее часто используемых динамических представлений для определения отсутствующих индексов является sys.dm_db_missing_index_details. Он предоставляет подробную информацию об отсутствующих индексах, включая таблицы, столбцы и столбцы равенства/предикатов, которые могут извлечь выгоду из индекса. Вот пример запроса:
SELECT
migs.user_seeks,
migs.avg_total_user_cost,
migs.avg_user_impact,
t.name AS [table_name],
c.name AS [column_name]
FROM
sys.dm_db_missing_index_details AS mid
INNER JOIN
sys.dm_db_missing_index_groups AS mig ON mid.index_handle = mig.index_handle
INNER JOIN
sys.dm_db_missing_index_group_stats AS migs ON mig.index_group_handle = migs.group_handle
INNER JOIN
sys.tables AS t ON mid.object_id = t.object_id
INNER JOIN
sys.columns c ON mid.column_id = c.column_id AND mid.object_id = c.object_id
WHERE
t.name <> 'spa'
ORDER BY
migs.avg_user_impact DESC;
Метод 2: sys.dm_db_missing_index_columns
Еще одно полезное динамическое представление — sys.dm_db_missing_index_columns, которое предоставляет информацию о столбцах, которые следует включить в отсутствующий индекс. Вот пример запроса:
SELECT
t.name AS [table_name],
c.name AS [column_name],
ic.equality_columns,
ic.inequality_columns,
ic.included_columns
FROM
sys.dm_db_missing_index_columns AS mic
INNER JOIN
sys.tables AS t ON mic.object_id = t.object_id
INNER JOIN
sys.columns AS c ON mic.column_id = c.column_id AND mic.object_id = c.object_id
CROSS APPLY
sys.dm_db_missing_index_details(mic.index_handle) AS mid
CROSS APPLY
sys.dm_db_missing_index_group_stats(mid.index_group_handle, mid.index_handle) AS migs
CROSS APPLY
sys.dm_db_missing_index_groups(mid.index_group_handle, mid.index_handle) AS mig
INNER JOIN
sys.dm_db_missing_index_group_stats AS migs ON mig.index_group_handle = migs.group_handle
INNER JOIN
sys.index_columns AS ic ON mid.index_handle = ic.index_handle
WHERE
t.name <> 'spa';
Метод 3: sys.dm_db_missing_index_group_stats
DMV sys.dm_db_missing_index_group_statsпредоставляет статистическую информацию о потенциальном улучшении, полученном от создания отсутствующего индекса. Вот пример запроса:
SELECT
t.name AS [table_name],
migs.avg_user_impact,
migs.avg_total_user_cost,
migs.user_seeks,
migs.unique_compiles,
mid.statement
FROM
sys.dm_db_missing_index_group_stats AS migs
INNER JOIN
sys.dm_db_missing_index_groups AS mig ON migs.group_handle = mig.index_group_handle
INNER JOIN
sys.dm_db_missing_index_details AS mid ON mig.index_handle = mid.index_handle
INNER JOIN
sys.tables AS t ON mid.object_id = t.object_id
WHERE
t.name <> 'spa'
ORDER BY
migs.avg_user_impact DESC;
Идентификация и устранение отсутствующих индексов может значительно повысить производительность базы данных SQL Server. В этой статье мы рассмотрели три различных метода с использованием различных динамических представлений управления (DMV), связанных с индексами, для обнаружения недостающих индексов. Используя sys.dm_db_missing_index_details, sys.dm_db_missing_index_columnsи sys.dm_db_missing_index_group_stats, администраторы и разработчики баз данных могут получить представление о потенциальных преимуществах создания новых индексов, что в конечном итоге улучшает выполнение запросов. и общая производительность приложения.
Помните, что регулярный анализ и оптимизация индексов — это непрерывный процесс, поскольку рабочая нагрузка базы данных и модели использования могут со временем меняться. Следуя этим методам и регулярно отслеживая производительность вашей базы данных, вы сможете обеспечить оптимальную производительность и удобство работы пользователей.