Вендоры СУБД работают над этим очень и очень долго. Как сказал Рик, это вероятно неразрешимая проблема, но я не думаю, что был проведен какой-либо формальный анализ NP-полноты пространства задач.
Однако лучше всего максимально использовать вашу СУБД. Все системы СУБД переводят SQL в какой-то план запроса. Вы можете использовать этот план запроса, который является абстрагированной версией запроса, в качестве хорошей отправной точки (СУБД будет выполнять МНОЖЕСТВО оптимизации, объединяя запросы в более работоспособные модели).
ПРИМЕЧАНИЕ: современные СУБД используют анализатор на основе затрат, который недетерминирован при обновлении статистики, поэтому планировщик запросов со временем может изменить план запроса для идентичных запросов.
В Oracle (в зависимости от вашей версии) вы можете сказать оптимизатору переключиться с анализатора на основе затрат на анализатор на основе детерминированных правил (это упростит анализ плана) с подсказкой SQL, например,
SELECT /*+RULE*/ FROM yourtable
Оптимизатор, основанный на правилах, устарел с 8i, но по-прежнему стоит около 10 г (я не знаю, как насчет 11). Однако анализатор, основанный на правилах, гораздо менее сложен: частота ошибок потенциально намного выше.
Для дальнейшего прочтения более общего характера IBM довольно плодотворно использовала свои патенты на оптимизацию запросов. Вот этот метод преобразования SQL в «абстрактный план» - хорошая отправная точка:
http://www.patentstorm.us/patents/7333981.html