Оптимизация генетических запросов (GEQO) в PostgreSQL
Модуль GEQO подходит к проблеме о птимизации запросов так, как если бы это была хорошо известная проблема путешествующего коммивояжера (TSP). Возможные планы запросов кодируются в виде целочисленных строк. Каждая строка представляет собой порядок соединения от одного отношения запроса к другому. Например, дерево соединений
/\
/\ 2
/\ 3
4 1
кодируется целочисленной строкой '4-1-3-2', что означает, что сначала присоединяются отношения '4' и '1', затем '3', а потом '2', где 1, 2, 3, 4 - идентификаторы отношений в оптимизаторе PostgreSQL.
Специфическими особенностями реализации GEQO в PostgreSQL являются:
- использование ГА с устойчивым состоянием (замена наименее подходящих особей в популяции, а не замена целых поколений) позволяет быстро сходиться к улучшенным планам запросов. Это очень важно для обработки запросов за разумное время;
- использование кроссинговера с рекомбинацией краев, который особенно хорошо подходит для поддержания низких потерь на краях, для решения TSP с помощью ГА;
- мутация как генетический оператор отменена, поэтому для создания легальных туров TSP не нужны механизмы восстановления.
Часть модуля GEQO адаптирована из алгоритма Genitor Д. Уитли.
Модуль GEQO позволяет оптимизатору запросов PostgreSQL эффективно поддерживать большие объединенные запросы за счет неполного поиска.