Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Проблема Oracle при работе с коллекциями  [new]
Ivanco_Khabarovsk
Guest
Такая проблема:
Есть коллекция, в которой лежат некие ID. Вяжем эту коллекцию с некой таблицей, для вычислений.
DECLARE
  n     NUMBER;
  arrID TYPE_T_NUMBER := TYPE_T_NUMBER (); -- Тип коллекции для NUMBER
BEGIN
  arrID.EXTEND ();
  arrID (1) := 1;
  arrID.EXTEND ();
  arrID (2) := 2;
  arrID.EXTEND ();
  arrID (3) := 3;

  SELECT SUM (s.n)
  INTO n
  FROM TABLE (arrid) t,
       SU s
  WHERE t.COLUMN_VALUE = s.id;
END;
Получаем время выполнения запроса: 1.3 сек

Переписываем данный PL/SQL блок (суть зпроса остается та же: выбрать по ID = 1, 2, 3):
DECLARE
  n NUMBER;
BEGIN
  SELECT SUM (s.n)
  INTO n
  FROM (SELECT 1 id FROM DUAL UNION ALL SELECT 2 FROM DUAL UNION ALL SELECT 3 FROM DUAL) t,
       SU s
  WHERE t.id = s.id;
END;
Получаем время выполнения запроса: 0.03 сек

Время выполнения данного блока очень критично, т.к. он повторяется тысячи раз. Где-то читал, что в таких запросах (с коллекциями), Oracle работает неоптимально. Пробовал ставить хинт cardinality (по некоторым советам) - не помогает.

Подскажите, в чем проблема, кто знает.
26 июн 11, 07:47    [10876415]     Ответить | Цитировать Сообщить модератору
 Re: Проблема Oracle при работе с коллекциями  [new]
Ivanco_Khabarovsk
Guest
Прошу прощения, господа форумчане, некорректно использовал хинт. Теперь вроде все нормально, время запроса мизерное.
Но тогда, если уж начал, объясните пожалуйста, что это за такой хитрый хинт, и что значит число "1". А если количество записей в коллекции больше 1?
DECLARE
  n     NUMBER;
  arrID TYPE_T_NUMBER := TYPE_T_NUMBER (); -- Тип коллекции для NUMBER
BEGIN
  arrID.EXTEND ();
  arrID (1) := 1;
  arrID.EXTEND ();
  arrID (2) := 2;
  arrID.EXTEND ();
  arrID (3) := 3;

  SELECT /*+ cardinality(t 1) */
         SUM (s.n)
  INTO n
  FROM TABLE (arrid) t,
       SU s
  WHERE t.COLUMN_VALUE = s.id;
END;
26 июн 11, 07:59    [10876419]     Ответить | Цитировать Сообщить модератору
 Re: Проблема Oracle при работе с коллекциями  [new]
Elic
Member

Откуда:
Сообщений: 29991
--+ ordered use_nl(s)
26 июн 11, 08:00    [10876421]     Ответить | Цитировать Сообщить модератору
 Re: Проблема Oracle при работе с коллекциями  [new]
AleX_PoTTeR
Member

Откуда:
Сообщений: 6
Аналогичная проблема: в моем случаи, вместо использования индекса по id, выполняется full scan.
Ivanco_Khabarovsk
Где-то читал ...
Вот тут нашел хоть какое-то объяснение. Но рекомендации из статьи(хинты) не помогли.
9 авг 11, 16:45    [11092868]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить