Непонятки с представлением

Ничего_не_понимаю
Дата: 04.08.2005 06:09:25
Есть две таблицы
CREATE TABLE SALES (SALEDTE DATE, SALESUM NUMBER);
и
CREATE TABLE SALES_ (SALEDTE DATE, SALESUM NUMBER);
по ним создана представление
CREATE OR REPLACE VIEW VSALES AS
SELECT * FROM SALES
UNION 
SELECT * FROM SALES_

почему запрос:
select  sum(salesum) from vsales where saledate between :FIRSTDATE and :LASTDATE;
вызывает FULL SCAN таблицы SALES_ если :FIRSTDATE и :LASTDATE находяться только в таблице SALES
Владимор Конев
Дата: 04.08.2005 06:21:16
А потому что твой запрос ораклом переписывается и исполняется вот в таком виде:
SELECT  SUM(salesum) 
  FROM (
          SELECT * FROM SALES
          UNION 
          SELECT * FROM SALES_
       ) vsales 
 WHERE saledate BETWEEN :FIRSTDATE 
                    AND :LASTDATE;
, то есть ORACLE вначале строит твое представление, а уж потом делает выборку из этого представления, накладывая на результаты запроса ограничение BETWEEN ... AND
Ничего_не_понимаю
Дата: 04.08.2005 06:32:19
А можно ли как то это дело оптимизировать(не изменяя запрос)?
суть в том что в SALES_ даные о продажах допустим за прошедшие 6 лет а в SALES за прошлый месяц.
Вячеслав Любомудров
Дата: 04.08.2005 06:35:37
Ничего_не_понимаю
почему запрос:
select  sum(salesum) from vsales where saledate between :FIRSTDATE and :LASTDATE;
вызывает FULL SCAN таблицы SALES_ если :FIRSTDATE и :LASTDATE находяться только в таблице SALES
А откуда Oracle это известно?
Ничего_не_понимаю
А можно ли как то это дело оптимизировать(не изменяя запрос)?
суть в том что в SALES_ даные о продажах допустим за прошедшие 6 лет а в SALES за прошлый месяц.
Partition by range(salesdate)
(если версия позволяет, конечно)