Улучшите порядок в 280 миллионах строк столбца

У меня есть приложение, которое показывает записи таблицы SQL Server внутри сетки после применения нумерации страниц. Пользователь может фильтровать или применять порядок к любому столбцу.

Проблема возникает, когда эта таблица становится слишком большой, например, на 280 миллионов записей. Когда пользователь применяет порядок к любому из своих столбцов, SQL Server начинает тратить много времени на упорядочивание записей и отображение 20 лучших записей внутри сетки.

Я знаю, что если я применю к нему индекс, результаты будут быстрее, но я не знаю, сколько столбцов пользователь может использовать для упорядочивания, и я не могу применить столько индексов.

Есть ли способ повысить производительность? Вы готовы дать мне предложения относительно других СУБД.

Я пытался применить индексы, и это работает, но мне нужны другие, лучшие решения, помимо индексов.

Хм, действительно ли пользователю нужно иметь возможность сортировать 280 000 000 записей? С точки зрения пользователя это кажется совершенно неуправляемым. Я бы подумал, что вы могли бы предварительно отфильтровать это до количества строк, которое действительно может понять человек.

Dale K 17.04.2024 12:39

К сожалению, да, мы применили сортировку и фильтрацию к 280 миллионам строк, чтобы пользователь мог выполнять аудит.

Zulfiqar Ali 17.04.2024 12:49

Я думаю, тогда это будет медленно.

Dale K 17.04.2024 12:53

Возможно, вы сможете повысить производительность, используя индекс Columnstore. Иначе я тоже не знаю. Возможно, добавьте несколько фильтров, которые аудиторы должны будут применять перед прокруткой 280 миллионов строк. Например, диапазон лет является обычным.

siggemannen 17.04.2024 12:58

Сколько столбцов в вашей таблице? Может ли пользователь каждый раз выполнять сортировку по нескольким столбцам или только по одному столбцу? 280 миллионов — это много записей, но если у вас, скажем, всего 4–7 столбцов, вы можете просто использовать индекс для каждого столбца и покончить с этим. Конечно, добавление индекса означает использование большего объема памяти, и это вам следует учитывать.

Zohar Peled 17.04.2024 14:30

Если цель предназначена для целей аудита, можете ли вы загрузить данные в хранилище данных (таблицы фактов/измерений)

Steve Ford 17.04.2024 23:30

@ZoharPeled, у меня в таблице 250 столбцов. Пользователь может сортировать только один столбец за раз.

Zulfiqar Ali 18.04.2024 08:15

@ZulfiqarAli, можете ли вы рассказать что-нибудь о схеме, распределении данных и о том, как вы пытаетесь сортировать данные, пожалуйста?

Conor Cunningham MSFT 19.05.2024 18:39
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
8
61
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

У меня была именно эта проблема: в моем случае я использовал Datatables.js и получал строки на стороне сервера, создавая (ложную!!) иллюзию бесконечной прокрутки.

Мне пришлось сделать некоторые незавершенные вещи, чтобы сделать его пригодным для использования.

  1. Некоторое время следите за тем, как пользователи выбирают порядок сортировки, чтобы определить общий порядок, который им нужен.

  2. Соберите запросы для этих общих порядков, а затем запустите их НА РЕАЛЬНЫХ ДАННЫХ, а не на сервере разработки, в SSMS с включенным параметром «Показать фактический план выполнения». Запишите все индексы, предложенные планом.

  3. Сделайте это для всех популярных упорядочений, а затем изучите индексы, чтобы увидеть, есть ли у них какие-либо общие крайние левые столбцы.

  4. Создайте индекс и посмотрите, улучшатся ли планы.

  5. Повторяйте до тех пор, пока ситуация не улучшится настолько, что жалобы пользователей превратятся в глухой рев.

  6. Добавьте несколько элементов пользовательского интерфейса, чтобы пользователи знали о медлительности.

Если вы оставите в своем приложении логику захвата запросов, вы сможете ответить другим индексом, если он очень нужен пользователю.

Это своего рода некий беспорядок, который нужно решить, чтобы удовлетворить пользователей такого рода функции извлечения данных. Удачи.

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