Любой оператор SELECT
, который возвращает 30 миллионов строк, будет всегда давать плохую производительность.
Учитывая, что оператор WHERE
может находиться в любом из сотен логических столбцов, его нельзя оптимизировать с помощью SORTKEY
. Однако основной причиной медленного ответа будет необходимость вернуть миллионы строк.
Redshift отлично подходит, если вы выполняете вычисления для миллионов (или даже миллиардов) строк, например:
SELECT COUNT(*) FROM table1 WHERE col10 = 1;
Это вернет одну строку.
Однако SELECT *
вернет миллионы строк, каждая с сотнями столбцов, поэтому вы сталкиваетесь с задержкой в сети от базы данных до вашего клиента. Это много данных вы пытаетесь отправить вниз.
Было бы полезно, если бы вы запросили только интересующий столбец, например:
SELECT user_id FROM table1 WHERE col10 = 1;
однако это все равно вернет много данных.
Итак, если вам действительно нужно, чтобы все эти строки вернулись, вам может понадобиться создать некую форму слоя кэширования для локального хранения этих данных.