История изменений
Исправление vtVitus, (текущая версия) :
если есть ограничение на память, то я бы стал думать в сторону правила преобразовании ([a,b,c], [1,3].....[T,F]) -> (N1, N2, ..., Nn), где N это обычные числа. В приведённом примере это может быть обычное OR всех значений в перечислении, * - это FFFFF. Приводишь запрос в такие же числа по тому же правилу. Тогда полным перебором по всем цифрам с AND получишь ограниченный набор данных, который можно полностью перебрать и получить результат. Проверок будет очень много, но они элементарные и легко раскладываются по ядрам, оверхед по памяти фактически отсутствуют. Можно сократить перебор приведя его к тройной схеме т.е. ([a,b,c], [1,3].....[T,F]) -> (N1, N2, ..., Nn) -> N сначала с проверкой по N формировать набор данных для проверки по вектору чисел Nn, который формирует окончательный набор для проверки. ну это навскидку, предполагая что запрос формирует достаточно ограниченный набор данных.
Исходная версия vtVitus, :
если есть ограничение на память, то я бы стал думать в сторону правила преобразовании ([a,b,c], [1,3].....[T,F]) -> (N1, N2, ..., Nn), где N это обычные числа. В приведённом примере это может быть обычное OR всех значений в перечислении, * - это FFFFF. Приводишь запрос в такие же числа по тому же правилу. Тогда полным перебором по всем цифрам с AND получишь ограниченный набор данных, который можно полностью перебрать и получить результат. Проверок будет очень много, но они элементарные и легко раскладываются по ядрам, оверхед по памяти фактически отсутствуют. ну это навскидку.