Форум программистов, компьютерный форум, киберфорум
Наши страницы
Oracle
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
Sergei007
2 / 2 / 0
Регистрация: 17.03.2010
Сообщений: 83
1

Почему запрос выполняется гораздо быстрее после ребилда индекса?

30.05.2012, 09:34. Просмотров 2012. Ответов 3
Метки нет (Все метки)

Доброго времени суток!
Пожалуйста помогите ответить вот на какой вопрос - в БД запрос (брал данные из 2 таблиц с большим числом данных) выполнялся очень долго(около 5 минут) что не допустимо в инф. системе. Данные из этих таблиц удаляются раз в квартал и соответственно удаляются 25% данных. Обычно после удаления данных запрос начинал работать быстрее, но не в этот раз. Мною были проведены операции сокращения ненужных индексов (но это не повлияло на ускорение 100%), затем я провел rebuilt индексов и о чудо запрос заработал буквально за 10-20 сек. Чем это можно объяснить, и что делает перестоение индекса?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.05.2012, 09:34
Ответы с готовыми решениями:

Не выполняется запрос
select distinct pl.nameu pl, pol.nameu pol, descr, pl.Adress pladress,...

Не выполняется запрос в SQLite3
Доброго времени суток, товарищи! Начинаю изучать СУБД в рамках универской...

Оптимизация запроса. Почему второй запрос работате гораздо быстрее.
Здравствуйте. было выяснено что следующий запрос очень сильно нагружает сервер...

На сервере работа скриптов выполняется гораздо быстрее, как добиться на локальном?
На сервере работа скриптов (работа с mysql) выполняется гораздо быстрее, как...

Почему заливка FloodFill гораздо быстрее заливки через PutPixel?
Почему если заливать FloodFill(x, y, c), то будет гораздо быстрее, чем если...

3
Grossmeister
Модератор
3395 / 2451 / 415
Регистрация: 21.01.2011
Сообщений: 10,758
30.05.2012, 09:53 2
Для начала надо смотреть планы запросов.
Если используется FULL SCAN, то после большого удаления больше поможет перестройка таблиц (например, ALTER TABLE ... MOVE).
Если используется доступ по индексу, то в некоторых случаях может потребоваться его перестройка, но в большинстве случаев это не нужно. Гораздо большее значение имеет пересбор статистики по таблице и индексам после массового удаления.
Перестройка индекса фактически создает индекс заново, т.е. "уходят" свободные блоки, плотнее упаковываются "полусвободные", понижается высота индекса (blevel). Можно посмотреть dba_indexes (колонки от blevel до clustering_factor) до перестройки и после перестройки и сбора статистики).
1
Sergei007
2 / 2 / 0
Регистрация: 17.03.2010
Сообщений: 83
30.05.2012, 10:55  [ТС] 3
Спасибо за ответ, теперь стало понятнее! Т.к. статистика собиралась неоднократно, но повторюсь данные удалялись раз в квартал и такого не наблюдалось, а здесь повидимому уже настолько индексное пространство оказалось разбросано, что помогло лишь перестроение индекса! В след раз как это проявится обязательно проверю blavel как сказал Grossmeister.
P.S. Уважаю умных людей, а еще и умеющих помочь! Респект Grossmeister!

ЗЫЫ: А еще вот какой вопрос Oracle автоматически делает что то вроде дефрагментациисвоих tablespace, ну и индексов соответственно?
0
Grossmeister
Модератор
3395 / 2451 / 415
Регистрация: 21.01.2011
Сообщений: 10,758
30.05.2012, 11:16 4
Цитата Сообщение от Sergei007
ЗЫЫ: А еще вот какой вопрос Oracle автоматически делает что то вроде дефрагментациисвоих tablespace, ну и индексов соответственно?
Oracle автоматом ничего не сжимает. Ибо неизвестны дальнейшие действия пользователей. Например, удалили кучу строк, Oracle произвел сжатие, а через час опять кучу данных вставили и придется опять пространство выделять. Поэтому подобные действия только по прямому указанию DBA
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.05.2012, 11:16

Консольное приложение выполняет обработку ArrayList быстрее (причем гораздо быстрее), когда является не активным
Помогите разобраться. Как такое возможно, что консольное приложение выполняет...

Почему любой первый запрос медленный, а остальные быстрее?
первый запрос после установления соединения с БД очень медленный (10 секунд), а...

Почему не выполняется запрос
Уважаемые форумчане, подскажите почему когда пишу в процедуре VB Private Sub...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru