Описание индекса
Относится к типу индексной структуры B(balanced)-tree (сбалансированное дерево). Используются в 99% случаев, при создании первичного ключа автоматически создается именно такой обычный индекс. Для более подробной информации рекомендую поискать в интернете, т.к. информации очень много, поэтому не буду дублировать.
Когда применять
Когда процент выводимых строк таблицы очень мал, в идеале для уникальных значений. Т.е. подходит как для условия "=", так и для between, например:
Подготовка тестовых данных
Чтобы воспроизвести данные для теста, достаточно создать таблицу с 10 000 000 строк без первичного ключа. Как это сделать описано в предыдущей статье.
Применение индекса
- Замерим скорость до создания индекса, на примере вывода любого id_oper:
--включаем вывод данных для процедуры dbms_output.put_line set serveroutput on; --замеряем скорость declare v_id_oper number; v_start timestamp; v_end timestamp; v_exec_time interval day to second; begin --фиксируем время начала выполнения v_start := systimestamp; --ищем любой id_op в таблице operation select id_oper into v_id_oper from operation where id_oper = (select id_oper from operation where rownum = 1); --первый попавшийся id_oper --фиксируем время завершения выполнения v_end := systimestamp; v_exec_time := v_end - v_start; dbms_output.put_line(v_exec_time); end;Результат: +00 00:00:09.431000 (9 секунд) (у вас конечно же будет другое время)
- Создадим обычный индекс для поля id_oper таблицы operation (выполняться будет пару минут):
create index id_oper_idx on operation(id_oper);
- Теперь снова замерим скорость скриптом из пункта 1.
Результат: +00 00:00:00.095000 (9 сотых секунды)
Итог: было 9 секунд, стало 0.09 секунд, производительность увеличилась в ~100 раз!
Спасибо за внимание!
- Oracle latches. Как узнать количество защелок в запросах?
- Oracle statistics. Как узнать статистику и время выполнения запроса?
- Oracle PL/SQL. Создание связанных таблиц и заполнение их тестовыми данными
- PL/SQL - генерация строк, чисел в Oracle
- Создание пользователя БД Oracle - первое, что нужно сделать