Part 1 Introduction: http://exadata-dba.blogspot.com/2021/11/in-memoryoracle.html
Part 2 IM Scan: http://exadata-dba.blogspot.com/2021/11/in-memoryoracle_22.html
Part 3 IM Join: http://exadata-dba.blogspot.com/2021/11/in-memoryoracle-part-3-im-join.html
Part 4: IM Aggregation http://exadata-dba.blogspot.com/2021/11/in-memporyoracle-part-4-im-aggregation.html
In-Memory Aggregation возникает в процессе выполнения GROUP BY. Исторически первым способом был SORT GROUP BY, затем в версии 10g появился HASH GROUP BY, а с появлением In-Memory появился способ VECTOR GROUP BY. VGB использует SIMD-инструкции, т.е. аппаратные возможности процессоров, поэтому на разных поколениях процессоров Intel, а также на процессорах разных производителей будут разные результаты. VGB возможен только при использовании IM, без IM VGB невозможен. VGB работает для HJ equi-join, аггрегация выполняется в PGA. VGB полезен для OLAP, STAR query aggregations, multi-dimentional aggregation.
Как это выглядит применительно к IM:
На первом шаге сканируется первая таблица запроса (обычно таблица измерений), применяются условия фильтрации и
создаётся таблица/вектор ключей, которая используется при доступе к второй таблице. Признаком VGB является строка KEY VECTOR USE :KV0000.
Функционально VGB похож на Bloom Filter. Отличие в том, что Bloom Filter не использует SIMD-инструкции процессора и IM-представление данных. Существует хинт NO_VECTOR_TRANSFORM, отключающий VGB, в этом случае вместо :KV0000 возникает Bloom Filter :BF0000
https://antognini.ch/papers/BloomFilters20080620.pdf
Если в запрос добавить хинт NO_VECTOR_TRANSFORM, отключающий VGB, то в плане выполнения получим Bloom-фильтр:
Youtube: In-Memory Aggregation