В недавнем выпуске SQL Server 2019 Microsoft представила целый ряд новых функций. Одно из наиболее интересных дополнений – новая агрегатная функция под названием APPROX_COUNT_DISTINCT. В этой статье мы ближе рассмотрим эту функцию и изучим ее влияние на производительность запросов и использование памяти.
Понимание проблемы
Прежде чем мы углубимся в детали новой функции, давайте сначала поймем проблему, которую она ставит перед собой. Традиционно, когда нам нужно подсчитать количество уникальных значений в столбце, мы используем подход COUNT(DISTINCT()). Однако этот подход может потреблять много ресурсов, особенно при работе с большими наборами данных. Он требует чтения каждого значения, что может занимать много времени и памяти.
Введение APPROX_COUNT_DISTINCT
Новая функция APPROX_COUNT_DISTINCT предоставляет альтернативный подход к подсчету уникальных значений. Вместо чтения каждого значения она экстраполирует статистику, чтобы получить приблизительные оценки. Это приближение позволяет ускорить выполнение запросов и снизить использование памяти.
Тестирование функции
Чтобы протестировать влияние новой функции, мы создали таблицу с 10 000 000 строк и столбцами с разным количеством уникальных значений. Мы сравнили производительность запросов, использующих функцию APPROX_COUNT_DISTINCT, с традиционным подходом COUNT(DISTINCT()). Мы также протестировали функцию как с режимом пакетной обработки над хранилищем строк, так и без него.
После проведения тестов мы обнаружили, что точность приближенных подсчетов была впечатляющей, с результатами, отклоняющимися от фактических значений примерно на 1%. Хотя приближенные подсчеты не всегда превосходили фактические подсчеты по продолжительности, они значительно снижали использование памяти. В режиме без пакетной обработки, требуемая память для приближенных подсчетов была минимальной по сравнению с значительным использованием памяти для фактических подсчетов. В режиме пакетной обработки использование памяти увеличилось, но относительное изменение было гораздо более благоприятным для приближенных подсчетов.
Заключение
Новая функция APPROX_COUNT_DISTINCT в SQL Server 2019 предлагает существенное снижение использования памяти, что делает ее ценным дополнением к набору инструментов SQL Server. Хотя она не всегда приводит к более быстрому выполнению запросов, она позволяет улучшить масштабируемость путем обработки большего количества одновременных запросов без заметного ухудшения производительности. Эта функция демонстрирует, что улучшения запросов измеряются не только скоростью, но и способностью обрабатывать увеличенную нагрузку. В этом отношении APPROX_COUNT_DISTINCT не разочаровывает.
В целом, новая агрегатная функция предоставляет практическое решение для подсчета уникальных значений в SQL Server 2019, предлагая улучшенную производительность и масштабируемость. Она определенно заслуживает изучения и рассмотрения для ваших будущих проектов.