«простой запрос» Я не уверен, что такая вещь существует. Наивный запрос, конечно.
select * from really_large_table where column1 = value;
будет работать очень плохо, если вы заботитесь только о 1 или 2 столбцах. Так как снежинка должна загружать все данные. Вы получите улучшение отношения данных столбца к строке, используя
select column1, column2 from really_large_table where column1 = value;
, теперь только два столбца данных необходимо прочитать из хранилища данных.
Возможновы ищете данные, значение которых равно > 100
, потому что вы думаете, что этого не должно произойти. Тогда
select column1, column2 from really_large_table where column1 > 100 limit 1;
будет работать намного лучше, чем
select column1, column2 from really_large_table order by column1 desc limit 50;
, но если то, что вы делаете, выполняет минимальную работу, можноПравильный ответ, следующий вариант - увеличить размер склада. Что для работы с IO дает скалярное улучшение, но некоторые этапы агрегирования не масштабируются как линейные.
Еще одна вещь, на которую следует обратить внимание в связи с тем, что иногда ваши вычисления могут создавать слишком много промежуточного состояния, и это "внешние разливы" (точная формулировка неверна), которые очень похожи на исчерпание памяти и переход на замену диска.
Тогда мы увидели нехватку памяти, когда выполняли слишком много работы в JavaScript UDF, что замедлило процесс.
Но большинство из них можно обнаружить, посмотрев профиль запроса и посмотрев нагорячие точки.