Как провести тест производительности Redshift Views? - PullRequest
0 голосов
/ 20 февраля 2019

У меня есть вопрос о тестировании производительности запросов для представлений в красном смещении.

У меня есть две таблицы: table_a и table_b : - таблица a и таблица b имеютопределен другой ключ сортировки.- таблица А имеет 6 полей для ключа сортировки.- таблица b имеет 4 поля для ключа сортировки.- обе таблицы имеют некоторые имена / типы столбцов, но таблица a - это супер-набор таблиц b.

Я создал представление v_combined .Представление объединяет данные из таблицы a и таблицы b на основе запрошенных дат.Например, если запрос сделан до даты XYZ, представление будет исходной таблицей a.В противном случае он получает таблицу b.

create view as v_combined
select a as x, b as y, c as z, to_timestamp(time_field::TEXT, 'YYYYMMDD'):timestamp as date
from table_a
where date < "MY_DATE"

union all

select * from table_b
where date > "MY_DATE"

Я провел сравнение между представлением и соответствующей таблицей:

  1. select count(*) from v_combined where date < "MY_DATE"
  2. select count(*) from table_a where date < "MY_DATE"
  3. select count(*) from v_combined where date > "MY_DATE"
  4. select count(*) from table_b where date > "MY_DATE"
  5. select * from v_combined where date < "MY_DATE" limit 10000
  6. select * from table_a where date < "MY_DATE" limit 10000
  7. select * from v_combined where date > "MY_DATE" limit 10000
  8. select * from table_b where date > "MY_DATE" limit 10000

(1) и (2) имеют время выполнения, аналогичное ожидаемому.

(3) и (4) имеют время выполнения, аналогичное ожидаемому.

(5), кажется, имеет более длительное время выполнения, чем (6).

(7), кажется, имеет более длительное время выполнения, чем (8).

Каков наилучший способ проверить производительностьвид в красное смещение?

1 Ответ

0 голосов
/ 20 февраля 2019

Я бы сказал, что лучший способ проверить производительность представления - это выполнить тестовые запросы точно так же, как вы!

Производительность этого конкретного представления всегда будет низкой, поскольку он выполняет UNION ALL.

В (5) необходимо получить ВСЕ строки из обеих таблиц перед применением LIMIT, тогда как (6) должен получить доступ только к table_a и может остановиться, как только он достигнетlimit.

Если вам нужна хорошая производительность для таких запросов, как этот, вы можете рассмотреть возможность создания комбинированной таблицы (а не представления).Запустите ежедневный (или почасовой?) Сценарий, чтобы воссоздать таблицу из объединенных данных.Таким образом, запросы будут выполняться намного быстрее.

...