Должен ли я использовать раздел оракула, если мне нужно запросить, используя столбец, не используемый в разделе раздела - PullRequest
0 голосов
/ 08 октября 2019

У меня есть таблица клиентов, содержащая 200 миллионов записей. Существует три источника клиентов (70 миллионов, 80 миллионов и 50 миллионов записей).

У меня есть три запроса к этой таблице.

  • Тот, который выбирает данные клиента на основе customerid и source.
  • Второй для извлечения информации о клиенте на основе source и accountid.
  • Третий, чтобы получить информацию о клиенте по номеру мобильного телефона.

Должен ли я использовать раздел списка в этой таблице, где я делю на source? Запрос на выборку клиента по номеру мобильного телефона после разбиения будет медленным. Вставка записей без разделения занимает много времени.

В таблице клиентов присутствуют следующие столбцы:

customerid number(12), 
source varchar2(100), 
accountid number(12), 
mobile number(10). 

Каждая запись клиента будет иметь различные customerid, source и * 1025. * комбинация.

Ответы [ 2 ]

2 голосов
/ 08 октября 2019

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

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

В любом случае, я сомневаюсь, что разбиение на source значительно улучшит производительность любых ваших запросов. Это просто недостаточно избирательно для сокращения разделов, чтобы дать заметное преимущество.

Что может быть более полезным, так это составные индексы на (source, customerid) и (source, accountid) с compress 1 в обоих случаях. Стоит сжать ведущий столбец индекса именно потому, что source настолько не селективен. Также индекс для одного столбца в (mobile) (без сжатия).

Кстати, почему source определяется как varchar2 (100) ? Это кажется безумно долгим для того, что является трехвалентным идентификатором. Это должен быть код из одного (или двух, или трех) символов (с таблицей поиска для полного описания, если требуется). Я думаю, что это может объяснить, почему «вставка записей без раздела занимает много времени» . Решение этой проблемы должно стать центром ваших усилий.

0 голосов
/ 08 октября 2019

С моей точки зрения, no partition + indexes в этих столбцах будет моим выбором (если вы предоставите информацию).

Более того, «раздел» означает «большие деньги», поскольку вы должны иметь Enterprise Edition (EE), а разделение является (насколько я могу судить) надстройкой к уже дорогому EE. Итак ... Я не предполагаю, что у вас (или вашей компании) нет этих денег, но указываю, что это может стать проблемой.

...