| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > СУБД, общие вопросы > Оптимизация запросов |
| Автор: Nastya 25.11.2004, 21:24 |
| Нужна дока, личные советы и предположения на тему: Оптимизация SQL - запросов. А конкретно анализ плана запроса (что это вобще за зверь) и собственно методы оптимизации. Я отлаживала запросы в IBExperte, там есть инструментарий для анализа, но польоваться по сути им я не умею, нехватает теоритической базы. Гуру, ваши советы |
| Автор: 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 можно добится существенного ускорения. Опять таки идет оптимизация работы с индексированными/неиндексированными полями. Очень хочится почитать по этому поводу что-нибудь умное, теоритическое. |
| Автор: Vit 27.11.2004, 15:24 |
| В некоторых базах данных есть такая штука как hints - это указания как именно надо выполнять запрос: какие блокировки ставить, какие индексы использовать и т.п. Но реализация зависит от конкретной базы данных. Общих сведений ты не найдёшь - их нет. Например транзакции в IB теоретически построены по другому принципу чем в Oracle - кроме внешнего интерфейса в реализации их ничего общего нет. Для большинства серверов работает механизм Query Rewrite когда на основе предлагаемого запроса оптимизатор сервера делает свой внутренний запрос, который и выполняется - естественно что в разных базах это происходит совершенно по разному. Ищи литературу по конкретной базе данных... |