[Документация Yandex Cloud](../../index.md) > [Yandex DataLens](../index.md) > Решение проблем > Рекомендации по оптимизации

# Рекомендации по оптимизации в Yandex DataLens

Чтобы отрисовывать чарты и селекторы, DataLens не хранит данные у себя, а отправляет запросы в БД источника. Сами запросы, а также любые вычисления (формулы в вычисляемых полях) выполняются на стороне источника данных. Поэтому, чтобы запросы и отрисовка полученных данных выполнялись быстрее, оптимизируйте данные в источнике.

Чтобы оптимизировать работу с данными, придерживайтесь следующих рекомендаций:

1. Поработайте над структурой данных в источнике:

   * Старайтесь хранить данные в виде, не требующем сложных операций при запросе к ним. По возможности предварительно рассчитывайте данные на стороне БД. Это позволит минимизировать вычисления с помощью формул DataLens.
   * Явно объявляйте типы данных на стороне БД, чтобы избежать преобразований типов в больших таблицах. Например, не храните даты как текст.
   * Сортируйте таблицы по часто используемым измерениям — как правило, это даты.
   * При построении [витрин](../../glossary/datamart.md) с большим количеством строк разделяйте агрегированные данные и детальную информацию по разным таблицам и датасетам. Это позволит снизить нагрузку на источник при запросе данных.
   * Формируйте на стороне БД системы материализованных таблиц разной степени детализации для разных графиков и разных задач пользователя. Не используйте одну большую таблицу для всех задач:
   
     * Если в дашборде на большинстве графиков выводится сумма продаж только по месяцам, то нет необходимости хранить дневные данные. Можно агрегировать данные на стороне БД и материализовать таблицу.
     * Если для графиков необходима дневная разбивка, можно использовать таблицу с большей детализацией.
     
     При этом селекторы по датам можно настроить так, чтобы они фильтровали все графики одновременно.

   * Создавайте отдельные материализованные таблицы-справочники для селекторов, чтобы не выбирать уникальные значения для поля из больших таблиц при формировании списка значений для селекторов.
   * При использовании [объединения данных](data-join.md) выполняется подзапрос к полному набору полей таблицы. Такие операции потребляют много ресурсов и для большинства БД снизят скорость работы дашбордов. Поэтому для ускорения работы:
   
     * По возможности измените структуру таблиц так, чтобы сократить количество операций объединения данных в датасете.
     * По возможности делайте объединение данных на стороне БД и материализуйте таблицу.
   
   * Учитывайте особенности хранения и доступа к данным той БД, к которой подключаетесь. Например, ClickHouse® не умеет использовать индексы по nullable-полям. Поэтому по возможности заменяйте `NULL` в таблицах на заполненные значения, если это не искажает расчеты.

1. Сократите нагрузку на источник при работе с данными:
      
   * Старайтесь исключить из датасета поля, которые не используются при построении чартов.
   * Поля предпочтительнее добавлять на уровне датасета, а не чарта.
   * Заранее удаляйте из таблицы строки, которые точно не будут использоваться в дашборде, то есть делайте предфильтрацию. Для неколоночных БД также удаляйте ненужные столбцы.
   * По возможности не создавайте датасеты на основе SQL-запросов. В этом случае кастомный SQL-запрос будет выполняться каждый раз при обращении к БД.
   * Не выводите на графиках большое количество точек. В DataLens существуют ограничения, которые не позволят этого сделать, но важно помнить принцип: чем меньше точек, тем выше скорость работы.

1. Оптимизируйте нагрузку на источник при организации дашборда:

   * Указывайте значения в селекторах на дашборде и используйте значения по умолчанию. По списку значений, выбранных в селекторе, формируется условие для фильтрации данных в чартах. Если не выбрано ни одно значение, возвращаются все данные. Это увеличивает нагрузку на источник.
   * Оптимизируйте структуру дашборда. Запросы к источнику выполняются для каждого чарта на текущей вкладке. При большом количестве чартов загрузка вкладки может занимать много времени. Расположите на одной вкладке минимальное количество чартов с учетом частоты их одновременного использования.
   * Сократите использование [автоматического обновления](dashboard.md#auto-update) данных дашборда. Не указывайте частоту обновления выше, чем частота обновления данных в источнике.
   * Используйте опцию **Количество одновременно загружаемых виджетов** в настройках дашборда.

1. Учитывайте особенности работы сервиса:

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


1. Используйте средства DataLens, помогающие оптимизировать работу с данными:

   * [Инспектор чартов](chart/inspector.md) — инструмент DataLens, позволяющий диагностировать проблемы в загрузке данных и их рендеринге в браузере.
   * [Кеширование](caching.md) часто запрашиваемых данных источника для быстрого доступа к ним.



_ClickHouse® является зарегистрированным товарным знаком [ClickHouse, Inc](https://clickhouse.com)._