Поставщики СУБД работали над этим очень и очень долгое время. Как сказал Рик, это , вероятно, проблема неразрешимая, но я не думаю, что какой-либо формальный анализ NP-полноты проблемного пространства был выполнен.
Однако, самое лучшее, чтобы максимально использовать ваши СУБД. Все системы СУБД переводят SQL в какой-то план запросов. Вы можете использовать этот план запросов, который является абстрактной версией запроса, в качестве хорошей отправной точки (СУБД будет выполнять LOTS оптимизации, сглаживая запросы на более работоспособные модели).
ПРИМЕЧАНИЕ. В современной СУБД используется анализатор, основанный на затратах, который не является детерминированным в отношении обновлений статистики, поэтому планировщик запросов со временем может изменить план запроса для идентичных запросов.
В Oracle (в зависимости от вашей версии) вы можете сказать оптимизатору перейти от анализатора, основанного на затратах, к анализу на основе определения основанного на правилах (это упростит анализ плана) с помощью подсказки SQL, например.
SELECT /*+RULE*/ FROM yourtable
правило оптимизатора является устаревшим с 8i, но она до сих пор висит вокруг, даже через 10 г (не знаю насчет 11). Однако анализатор, основанный на правилах, гораздо менее изощренен: вероятность ошибки намного выше.
Для дальнейшего ознакомления с более общим характером IBM довольно плодотворна благодаря своим патентам на оптимизацию запросов. Это один из способов преобразования SQL в «абстрактный план» является хорошей отправной точкой: http://www.patentstorm.us/patents/7333981.html
Я предполагаю, что вы имеете в виду точно такой же набор результатов. Это означает, что одни и те же столбцы (и одни и те же типы данных) имеют одни и те же данные строки. Верный? – Craig 2008-09-11 15:37:24
Yep, thats right Craig – 2008-09-17 06:57:04