Базы данных Oracle - статьи



   nice-economic.ru            

Использование хранимых шаблонов - часть 2


  dict_id - идентификатор словаря

  ItemID - порядковый номер сущности

  Name - имя сущности

SQL> create table t1 (

  2    dict_id int,

  3    itemid int,

  4    name varchar2(100)

  5  );

Таблица создана.

SQL> create index indx_t1

  2  on t1(dict_id, itemid);

Индекс создан.

SQL> analyze table t1 estimate statistics;

Таблица проанализирована.

Включим показ плана выполнения SQL выражений.

SQL> set autotrace on explain

Создадим переменную привязки (bind variable), проинициализируем её и запустим наш оптимизируеммый запрос:

 

SQL> var itemid number

SQL> begin :itemid:= 0; end;

  2  /

Процедура PL/SQL успешно завершена.

SQL> select /*+ rule*/ *

  2  from t1

  3  where itemid = :itemid;

строки не выбраны

План выполнения

----------------------------------------------------------

   0      SELECT STATEMENT Optimizer=HINT: RULE

   1    0   TABLE ACCESS (FULL) OF 'T1'

Процедура PL/SQL успешно завершена.

План выполнения показывает полное сканирование таблицы (full table scan, FTS).

Выполним тот же запрос, но "выключив" подсказку (уберем "+"):

SQL> select /* rule*/ *

  2  from t1

  3  where itemid = :itemid;

строки не выбраны

План выполнения

----------------------------------------------------------

   0    SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=1 Bytes=78)

   1  0   TABLE ACCESS (BY INDEX ROWID) OF 'T1' (Cost=2 Card=1 Bytes=78)

   2  1     INDEX (SKIP SCAN) OF 'INDX_T1' (NON-UNIQUE)

План выполнения показывает доступ к данным таблицы посредством индекса 'INDX_T1' . Доступ в пределах индекса осуществляется как  INDEX SCIP SCAN ACCESS, впервые представленный в Oracle9i. Исходим из того, что набор данных в таблице таков, что, этот план намного лучше первого. К нему и будем стремится.




Содержание  Назад  Вперед