Как решить проблему с пространством спула с помощью rank () для раздела с помощью оптимизации SQL?

У меня есть таблица с информацией о контактах с разными клиентами в формате

адрес электронной почты | обработка_группа | customer_id | contact_date |

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

explain create table db.responses_with_rank
as 
(  select a.*, 
          rank () over (partition by customer_id order by contact_date asc)as xrank
  from  db.responses_with_rank
) 
with data
primary index (email_address, treatment_group) 

Мой запрос выдан. Существует первичный индекс email_address, treatment_group, который приводит к перекосу 1,1, и вторичный первичный индекс customer_id. Я собрал статистику по обоим наборам индексов. Таблица довольно большая - около 200 миллионов записей. Могу ли я попытаться оптимизировать этот запрос?

1 ответ

Недостаточно информации для определения причины ошибки. Для начала добавьте в свой вопрос следующее:

  1. Версия TD (select * from dbc.dbcinfo)
  2. План выполнения
  3. Команды сбора статистики, которые вы использовали
  4. customer_id верхние частоты (select top 10 customer_id,count(*) from db.responses_with_rank group by 1 order by 2 desc)
  5. У вас есть широкие текстовые столбцы в вашей таблице?

Ps настоятельно рекомендую использовать create multiset table и не create table,

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