Поскольку вы ищете специфическую информацию для Oracle, я бы порекомендовал блог Ask Tom в Oracle. В общем, думаю, вы найдете совет не настраивать запрос. Вы получите хороший совет о том, как написать запрос, который оптимизатор может оптимизировать. Документация по Oracle также доступна онлайн , и я обычно ищу там актуальную информацию по Oracle. Я не работал с SQLServer, поэтому у меня нет никаких рекомендаций для него.
За последние несколько лет я не видел много нового в области оптимизации запросов. Большим изменением является устаревший оптимизатор на основе правил, с которым я едва помню, как работал. Однако я понимаю, что SQLServer по-прежнему использует оптимизатор на основе правил, поэтому понимание его правил может помочь.
Инструмент, с помощью которого вы можете отредактировать запрос, выполнить его и создать план объяснения, помогает понять, какие изменения приводят к успешному выполнению запроса. У меня были хорошие результаты с AquaData Studio, и мне действительно нравится его древовидная структура. SQL Developer должен делать то же самое.
Как и при любой оптимизации, вам необходимо иметь количественные данные о ее производительности. Затем вы можете определить, действительно ли вы его оптимизировали.
Как оптимизировать запрос частично зависит от того, как синтаксический анализатор строит и оптимизирует запрос. В большей степени это зависит от распределения запрашиваемых данных. В базе данных Oracle, если результирующий набор составляет четыре процента или более от таблицы и распределен случайным образом, сканирование таблицы обычно выполняется быстрее, чем индекс.
Я работал над оптимизацией запросов для команды разработчиков. Только два или три запроса в год требовали серьезной оптимизации. Большинство запросов достаточно просты, поэтому они не нуждаются в оптимизации. Остальные обычно могут быть обработаны путем добавления отсутствующих путей соединения.
Для Oracle есть три настраиваемых параметра, которые могут существенно повлиять на производительность. Стоимость поиска индекса и данных взаимодействует, изменяя условия, при которых индекс будет использоваться или не будет использоваться. Эти два могут быть настроены для каждой сессии. Значения по умолчанию часто не оптимальны. Другое значение определяет, сколько альтернатив будет использовать оптимизатор. Увеличение этого значения часто помогает.
Оптимизация существенно зависит от распределения данных и объема. При его оптимизации лучше всего использовать копию рабочей базы данных или, по крайней мере, базу данных с таким же распределением данных и томами. Я серьезно нарушил среду тестирования, оптимизировав запрос для базы данных производственных заказов. Базы данных для тестирования и разработки имели существенно различное распределение данных, что приводило к сбою запроса даже при значительно меньшем количестве данных.