2016-10-23 9 views
0

У меня есть таблица хранения информации о контактах, сделанных для различных клиентов в форматеКак решить ошибку spool space с рангом() над разделом путем оптимизации SQL?

email_address | treatment_group | 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 М записей. Можно ли попытаться оптимизировать этот запрос?

+2

Что такое DDL исходной таблицы? И сколько у вас катушка? 'select spoolspace from dbc.usersV где UserName = user;' – dnoeth

+0

Btw, что является * вторичным первичным индексом *? Статистика не поможет в вашем случае. – dnoeth

ответ

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. У вас есть широкие текстовые столбцы в таблице?

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

+0

Я посмотрел номер 4 и обнаружил, что у нескольких клиентов было больше строк, а остальные. Я исключил тех клиентов, которые позволили мне сделать первичный ключ customer_id без перекоса таблицы. Это позволило запустить запрос. – Kristen

+0

Большое спасибо за вашу помощь! – Kristen

+0

Мое удовольствие :-) –