Когда я использую unnest() в представлении и использую это представление в операторе выбора, Greenplum, похоже, терпит неудачу только в поиске предполагаемого раздела и вместо этого выполняет поиск по всему разделу основной таблицы. То же самое применимо и при использовании подзапроса вместо представления.
Например:
Select something from (select unnest(an_array_field) from table_y)
where date = 'somedate' and state = 'somestate'
В настоящее время у нас есть 2 разных сервера с 2 разными версиями Greenplum. Сервер A работает на более старой версии (4.2.1), а сервер B работает на 4.2.3. Выполнение того же запроса выше приведет к другому результату. Сервер A (старый) вернет запрос через несколько секунд, а сервер B (новый) вернется навсегда. Запуск объяснения запроса показывает, что сервер A выполняет сканирование только одного из разделов (с датой и состоянием в предложении where), в то время как сервер B выполняет сканирование каждого раздела, что приводит к замедлению.
Структура таблиц для обеих БД одинакова. Выполнение запроса без распаковки не вызовет проблем. Итак, я подозреваю, что что-то делать с новой версией. Могу ли я что-нибудь сделать, чтобы решить эту проблему?