Я не думаю, что есть простой способ сделать это, но есть вероятность, что ...
Мне дано несколько списков из примерно 10000 записей, каждый из 10 миллионов записей.Таблица.Данные в настоящее время генерируются запросами по различным неиндексированным элементам.Я хочу автоматически создавать запросы, которые дают одинаковые результаты, используя десять отдельных проиндексированных полей.
Есть ли известный алгоритм для создания чего-то подобного?Я имею в виду не только основы включения каждого индексированного «узла» со своим собственным OR.
Например, предполагая, что нужны следующие данные:
Letter, Number
A, 1
A, 2
B, 1
C, 2
и исходная база данных имеет
Letter, Number
A, 1
A, 2
A, 3
B, 1
C, 1
C, 2
D, 1
D, 3
Я бы хотел что-то вроде:
WHERE ((Letter = 'A' OR Letter = 'B') AND (Number = 1 OR Number = 2))
OR (Letter = 'C' and Number = 2)
Или, может быть
WHERE (Letter IN ('A', 'B', 'C') AND Number IN (1, 2)
AND NOT (Number = 1 AND Letter = 'C'))
Но я думаю Я бы предпочел не иметь
WHERE (Letter = 'A' AND Number = '1') OR
(Letter = 'A' AND Number = '2') OR
(Letter = 'B' AND Number = '1') OR
(Letter = 'C' AND Number = '2')
- если только эксперты по базам данных не считают, что это будетгораздо более оптимизированный в долгосрочной перспективе, для размера выборки, о котором мы говорим.Время выполнения запросов важно;времени выполнения инструмента конвертации нет.Мне также не нужно обязательно получать «лучший» ответ;«достаточно хорошо» приемлемо.
Мой текущий план состоит в том, чтобы подсчитывать, сортировать и повторять поиск вещей, которые можно сгруппировать, чтобы попытаться создать как можно меньше «группировок»;Я думаю, что я бы предпочел не иметь десять тысяч (A и B и C и D и E и F и G и H и I и J) вместе.
Мысли?Экспертный совет?