7 месяцев назад
Происшествие с индексом
Происшествие с индексом. Ответ Друзья, всем привет! 👋 С вами Костя Андронов 🙂 В понедельник мы опубликовали пост с интересной ситуацией, которую я показывал на одной из практик курса «Оптимизация Oracle SQL». Несмотря на идеальные условия для применения индекса (селективность предиката — всего 1,6%), Oracle выбирает Table Access Full вместо Index Range Scan 😱 Разбираемся, почему это произошло. 📌 Как Oracle выбирает метод доступа к данным? На этапе hard-parse оптимизатор строит планы с разными методами доступа и оценивает их «стоимость» для конкретного запроса. Получается, он решил, что обойти всю таблицу «дешевле», чем использовать индекс...
1 год назад
Медленные индексы
Несмотря на эффективность обхода дерева, существуют случаи, когда поиск по индексу работает не так быстро, как ожидалось. Это противоречие долгое время подпитывало миф о дегенерированном индексе. Миф утверждает, что перестроение индекса является чудодейственным решением. Стоит принять как данность, что перестроение индекса не улучшает производительность в долгосрочной перспективе. Истинная причина медленной работы простых запросов — даже при использовании индекса — может быть объяснена простыми вещами...
1860 читали · 3 года назад
Получение плана выполнения запроса с помощью EXPLAIN PLAN
Любой запрос, даже без условия во WHERE и без джоинов с таблицами, будет выполняться по какому-то плану. СУБД (например, ORACLE или MS SQL Server) может оценить запрос до его выполнения, то есть то, как он будет выполнен и дать примерную оценку своих трудозатрат на каждый этап действий (сколько примерно данных с жёсткого диска будет прочитано, сколько нужно процессорных ресурсов для просчёта чего-либо или для расстановки данных в нужном порядке и т.д). В разных программах работы с базами данных получение плана запроса может быть более удобным чем в других программах...
9 месяцев назад
Массивы в Oracle
В Oracle массив — это структура, которая позволяет хранить набор значений в одной переменной. Представьте, что у вас есть список номеров школ — вместо того чтобы заводить 10 переменных `school1`, `school2`, ..., мы кладём все значения в один контейнер и работаем с ними как с единым объектом. Массивы в Oracle особенно полезны в PL/SQL, при передаче данных между процедурами, а также при интеграции через OCI (Oracle Call Interface). В Oracle уже есть готовые коллекции в пакете SYS, которые используются...