У меня есть огромная таблица в хранилище данных (Vertica). Я обращаюсь к этой таблице по частям в целях оптимизации. То, как я решаю свои куски, довольно просто. У меня есть столбец первичного ключа, например A, и я беру MAX(A)
. У меня размер блока 20000, и я создал (A/20000)+1 блок. Я формирую запрос для каждого фрагмента и извлекаю данные.
Проблема с этим подходом заключается в следующем:
- Количество моих фрагментов зависит от
MAX(A)
, аMAX(A)
растет очень быстро, и, таким образом, количество фрагментов также увеличивается вместе с ним.
Я выбрал число 20000, потому что это дает мне оптимальную производительность. Но распределение первичного ключа в кусках 20000 настолько разбросано. Например, 0-20000 может содержать только 3 элемента, а диапазон 20000-40000 может содержать 500 элементов, и ни один диапазон не приближается к 20000.
Я пытаюсь выяснить, существует ли какой-либо хороший алгоритм аппроксимации для этой проблемы, который минимизирует количество фрагментов и заполняет около 20000 первичных ключей в одном фрагменте.
Любые указатели на решение приветствуются.
OFFSET
иLIMIT
SQLSELECT
. - person j_random_hacker   schedule 23.01.2015