Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > СУБД, общие вопросы > Оптимизация запросов


Автор: Nastya 25.11.2004, 21:24
Нужна дока, личные советы и предположения на тему:
Оптимизация SQL - запросов. А конкретно анализ плана запроса (что это вобще за зверь) и собственно методы оптимизации.
Я отлаживала запросы в IBExperte, там есть инструментарий для анализа, но польоваться по сути им я не умею, нехватает теоритической базы.

Гуру, ваши советы smile

Автор: Vit 26.11.2004, 00:56
Имеется ввиду конкретно IB?

Автор: gray_k 26.11.2004, 09:33
Если совсем просто, то план запроса - это логическая структура выполнения запроса, типа "полный перебор таблицы такой-то по полю такому-то затем перебор по такому-то индексу и т.п.".
А оптимизация - это собственно создание такого запроса и структуры индексов, которые обеспечат максимальное быстродействие. Часто в запросах надо напрямую указывать какие индексы использовать. Ну ещё собственно можно и саму базу оптимизировать - размер кэша, быстрая запись, размер страницы...

Автор: AntonSaburov 26.11.2004, 13:53
Можно еще экспериментировать с WHERE - поставить условия в разном порядке. Т.е. сначала большая таблица обрезается условиями и только потом джойнится со справочниками. Иногда бывает наоборот и это порождает много лишних записей > много памяти жрет и много времени.

Хотя это уже действительно будет сильно зависеть от SQL. Я подозреваю, даже разные версии одного и того же SQL могут по разному обрабатывать запрос.

Автор: Nastya 27.11.2004, 12:12
Хотелось бы под IB, но не обязательно.
Я в принципе поняла, что такое план, но есть алгоритмы оптимизации. При помощи тогоже перставоления названий таблиц во From...Inner join можно добится существенного ускорения. Опять таки идет оптимизация работы с индексированными/неиндексированными полями.

Очень хочится почитать по этому поводу что-нибудь умное, теоритическое. smile

Автор: Vit 27.11.2004, 15:24
В некоторых базах данных есть такая штука как hints - это указания как именно надо выполнять запрос: какие блокировки ставить, какие индексы использовать и т.п. Но реализация зависит от конкретной базы данных. Общих сведений ты не найдёшь - их нет. Например транзакции в IB теоретически построены по другому принципу чем в Oracle - кроме внешнего интерфейса в реализации их ничего общего нет. Для большинства серверов работает механизм Query Rewrite когда на основе предлагаемого запроса оптимизатор сервера делает свой внутренний запрос, который и выполняется - естественно что в разных базах это происходит совершенно по разному. Ищи литературу по конкретной базе данных...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)