Попытка redshift повторно использовать скомпилированный код в запросах стиля where-in
Как обсуждалось здесь, redshift компилирует запросы при первом выполнении, а затем повторно использует этот скомпилированный код для аналогичных последующих запросов. Это приводит к тому, что первый запрос будет медленным (от 3 до 10 секунд), а последующие аналогичные - довольно быстрыми (от 80 до 200 мс). Это числа, которые я наблюдал на небольшом кластере с небольшим набором данных (1-5M рядов), другие имеют аналогичный опыт.
В этой статье:
Это то, что [не] вызвало перекомпиляцию:
- Изменение количества student_ids в предложении WHERE менее чем на 10%
У меня есть похожий запрос, где я интенсивно использую WHERE ... IN(...)
, (заполняется полем множественного выбора в пользовательском интерфейсе), и это приводит к тому, что каждый запрос, использующий эти фильтры, выполняется намного медленнее, поскольку для красного смещения необходимо перекомпилировать эти запросы. В моем случае, > 90% времени, изменение одного значения в WHERE IN
заставляет красное смещение перекомпилировать запрос.
И потому, что комбинации каждого фильтра очень большие (у меня около 10 фильтров, так что о 10!
), подогрев кеша компиляции запросов, как в предыдущей статье, на самом деле не вариант.
Какие стратегии доступны для того, чтобы redshift использовал скомпилированный код для этого стиля запроса (возможно, переписать запрос в другом стиле, чтобы было возможно согревание кэша?)