Индексы на большой базе данных SQL

У меня очень большая таблица в базе данных Azure SQL, которая уже имеет более 30 миллионов строк и имеет много вставок, выполняемых в таблице каждый день ~ 50-60k

У нас есть разные страницы в веб-приложении, которым нужны данные из этой большой таблицы ... каждая страница имеет свой способ запроса этой таблицы с точки зрения того, какие столбцы требуются и какие столбцы упомянуты в предложении where.

Поскольку база данных находится на лазурном уровне, некоторые индексы были автоматически применены лазером, глядя на выполняемые запросы, которые теперь вызывают проблемы с производительностью, поскольку размер базы данных очень велик. Используя dmv в SQL, я обнаружил, что размер данных составляет около 15 ГБ, но индекс почти 65 ГБ

Как в этом случае создать эффективные индексы?

Вы рассматривали уровень кеширования? Каждая страница не должна попадать напрямую в базу данных при каждом чтении.

Aaron Bertrand 12.12.2018 13:35

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

Pratik Somaiya 12.12.2018 17:42
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
2
140
3

Ответы 3

Брентозар опубликовал свой бесплатный сценарий, который выполняет хороший анализ, например:

  • какие индексы существуют
  • как часто используются индексы
  • как часто механизм запросов ищет несуществующий индекс.

На основе приведенного выше сценария можно сделать вывод, какие индексы следует отбросить в базе данных SQL Azure.

Как сообщает MSDN, можно удалить индексы в базе данных SQL Azure.

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

Вы подсчитываете кластерные индексы в размере индекса? Поскольку этот индекс хранит данные, он не должен считаться размером «индекса». Это должны быть только все остальные типы индексов (некластеризованный, некластеризованный columnstore и т. д.).

Создание эффективных индексов всегда связано с основами настройки запросов. Во-первых, определите запросы, которые выполняются медленно. Во-вторых, посмотрите на код и план выполнения, чтобы понять, что делает запрос и почему он может выполняться медленно. Чаще всего проблема не в индексах, а в коде. Затем, в зависимости от того, что вы найдете в коде и плане выполнения, сначала исправьте код, а во-вторых, создайте или измените индексы для поддержки кода. Убедитесь, что вы измеряете производительность запроса до изменений и после, чтобы убедиться, что изменения приводят к улучшениям.

Кроме того, база данных SQL Azure не обслуживает статистику. Вы должны это настроить. Некоторые из ваших статистических данных могут потребовать особой любви и заботы. Вам нужно будет изучить их более подробно, чтобы определить те, которые устаревают без обновления, или те, которые нуждаются в полном обновлении сканирования, по сравнению с теми, для которых необходимо выполнить выборку (и размер выборки).

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

Другие вопросы по теме