← Назад к вопросам

Что такое статистика в SQL?

1.0 Junior🔥 271 комментариев
#Базы данных и SQL

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое статистика в SQL?

Статистика в SQL — это метаинформация о распределении данных в таблицах и индексах, которую использует оптимизатор запросов для выбора оптимального плана выполнения. Это один из ключевых механизмов, влияющих на производительность баз данных.

Зачем нужна статистика?

Функции статистики:

  • Оптимизация планов выполнения — оптимизатор использует статистику для оценки количества строк, которые вернет каждая операция
  • Выбор метода доступа — определяет, использовать ли индекс или полное сканирование таблицы
  • Выбор порядка объединения — в JOIN операциях статистика влияет на очередность объединения таблиц
  • Оценка стоимости — помогает выбрать наименее дорогостоящий план

Типы статистики

В SQL Server:

  • Column statistics — информация о распределении значений в столбце (гистограмма, плотность)
  • Index statistics — статистика по индексам
  • Statistics objects — пользовательские объекты статистики

Ключевые параметры:

  • Гистограмма (Histogram) — показывает распределение значений
  • Density — доля дублирующихся значений
  • All density — плотность для группы столбцов

Примеры использования

// C# код для работы с статистикой SQL Server
using (SqlConnection conn = new SqlConnection(connectionString))
{
    // Создание статистики
    SqlCommand cmd = new SqlCommand(
        "CREATE STATISTICS stat_UserAge ON Users(Age)", conn);
    conn.Open();
    cmd.ExecuteNonQuery();
    
    // Обновление статистики
    cmd.CommandText = "UPDATE STATISTICS Users WITH FULLSCAN";
    cmd.ExecuteNonQuery();
    
    // Просмотр статистики
    cmd.CommandText = "DBCC SHOW_STATISTICS(Users, stat_UserAge)";
    using (SqlDataReader reader = cmd.ExecuteReader())
    {
        while (reader.Read())
        {
            Console.WriteLine($"Updated: {reader[Updated]}");
        }
    }
}

Управление статистикой

Основные операции:

  • CREATE STATISTICS — создание новой статистики
  • UPDATE STATISTICS — обновление существующей статистики (FULLSCAN, SAMPLE)
  • DROP STATISTICS — удаление статистики
  • DBCC SHOW_STATISTICS — просмотр содержимого статистики

Параметры обновления:

  • FULLSCAN — сканирование всех строк (медленно, точно)
  • SAMPLE n PERCENT — сканирование процента строк
  • RESAMPLE — использование прежнего метода сканирования

Проблемы с устаревшей статистикой

Последствия:

  • Неоптимальные планы выполнения
  • Высокая нагрузка на процессор и память
  • Медленные запросы
  • Блокировки

Решение: регулярное обновление статистики, использование автоматического обновления, настройка threshold для пересчета.

Лучшие практики

  • Включай автоматическое обновление статистики (AUTO_UPDATE_STATISTICS)
  • Регулярно проверяй актуальность статистики
  • Используй FULLSCAN для критических таблиц
  • Избегай удаления статистики без необходимости
  • Мониторь влияние на производительность