запрос из БД Oracle 8 с учетом секционирования таблицы
От: DmitryMTS  
Дата: 13.04.04 08:23
Оценка:
Новичок я в этом деле... Сейчас есть такой запрос:

select Col1, Col2
from Table1 t
where (t.Transact > 360000) and ....


Секции (Partitions) строятся по полю Transact, нужный диапазон смотрю ручками (SQL Navigator'ом, например, с какой секции начинается нужная дата). Как правильно получить номер необходимой секции?
Re: запрос из БД Oracle 8 с учетом секционирования таблицы
От: Sergey Ten http://www.fastalgo.com
Дата: 13.04.04 08:52
Оценка:
Здравствуйте, DmitryMTS, Вы писали:

DMT>Как правильно получить номер необходимой секции?


Можно по ROWID:
SQL> create table t_partitioned (i number, s varchar2(20))
  2  partition by range (i)
  3  (partition p1 values less than(10),
  4   partition p2 values less than (maxvalue));

Table created.

SQL> insert into t_partitioned select rownum, object_name 
  2  from all_objects where rownum <= 20;

20 rows created.

SQL> select t.i, o.subobject_name from t_partitioned t, all_objects o
  2  where dbms_rowid.rowid_object(t.rowid) = o.object_id;

         I SUBOBJECT_NAME
---------- ------------------------------
        10 P2
        11 P2
        12 P2
        13 P2
        14 P2
        15 P2
        16 P2
        17 P2
        18 P2
        19 P2
        20 P2

         I SUBOBJECT_NAME
---------- ------------------------------
         9 P1
         8 P1
         7 P1
         6 P1
         5 P1
         4 P1
         3 P1
         2 P1
         1 P1

20 rows selected.
Re[2]: запрос из БД Oracle 8 с учетом секционирования таблиц
От: Аноним  
Дата: 13.04.04 09:31
Оценка:
Здравствуйте, Sergey Ten, Вы писали:

ST>Можно по ROWID:

ST>
...
SQL>> select t.i, o.subobject_name from t_partitioned t, all_objects o
ST>  2  where dbms_rowid.rowid_object(t.rowid) = o.object_id;
...
ST>


Надо искать начиная с нужной партиции, во всех последующих.
Re[3]: запрос из БД Oracle 8 с учетом секционирования таблиц
От: Sergey Ten http://www.fastalgo.com
Дата: 13.04.04 09:47
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Надо искать начиная с нужной партиции, во всех последующих.


Об этом заботится cost-based optimizer. Он составляет план запроса таким образом, чтобы не сканировать ненужные файлы данных.
Re[3]: запрос из БД Oracle 8 с учетом секционирования таблиц
От: Sergey Ten http://www.fastalgo.com
Дата: 13.04.04 17:36
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Надо искать начиная с нужной партиции, во всех последующих.


Как вариант, могу предложить такую конструкцию:
SQL> select * from t_part partition (p2)
  2  union all
  3  select * from t_part partition (p3);

Количество union-ов можно формировать динамически.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.