Сортировка больших наборов данных по любому столбцу / атрибуту - PullRequest
0 голосов
/ 08 мая 2019

У меня есть база данных MySQL с ~ 20M записями (и растущими), распределенными в некоторых таблицах.В моей системе есть функция, где эта информация отображается на страницах.Итак, на данный момент все хорошо, мне просто нужно выполнить запрос с использованием SQL, выполнив несколько JOIN, и ограничить набор результатов размером страницы.

Проблема в том, что теперь мне нужно реализовать функцию сортировки, чтобы пользователь мог сортировать данные по любому столбцу.Добавление индексов во все столбцы, кажется, не является хорошим вариантом, и оставить его без индексов приведет к полному сканированию таблицы.И даже хуже всего: SQL ORDER BY может быть даже медленнее при сортировке по объединенному столбцу.

Поэтому я начинаю думать о других возможностях, таких как интеграция MySQL с Hadoop или Spark, но у меня нет опыта в этом.

Каков правильный путь?Haddop, Spark, ElasticSearch, или использовать другую стратегию с MySQL, или что-то еще?

Спасибо.

1 Ответ

1 голос
/ 08 мая 2019

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

Одним из ключевых преимуществ использования секционирования является сокращение секций. Это означает, что когда вы используете определенные столбцы в предложении where, планировщик запросов знает, какие разделы ему нужно искать, а какие не имеют отношения к этому запросу. Только поиск соответствующих разделов делает запрос намного быстрее. Вы можете разбить таблицу на что-то вроде столбца даты или на автоинкремент int (serial).

Другие типы разбиения включают в себя хэш и список. Хеш и список, как правило, более полезны, если вы запрашиваете на основе определенных значений. Вот почему я предлагаю дистанционное разделение.

Вот хорошие общие таблицы разбиения ресурсов: Все, что вам нужно знать о разделах MySQL

Выбранный ответ на этот вопрос StackExchange касается добавления разбиения к уже существующей таблице: Как добавить раздел к существующей таблице в mariadb / mysql?

...