Re[9]: Можно ли ускорить count в Oracle?
От: wildwind Россия  
Дата: 29.04.08 18:06
Оценка:
Здравствуйте, krot_av, Вы писали:

_>Здравствуйте, wildwind, Вы писали:



W>>Не упорствуй в своем заблуждении. Сравни планы для "select pk from table" и "select * from table" для обычной (heap) таблицы.


_>Я их сравнивал в оракл и DB2.

Продемонстрируй! Или просто скажи что проверять было лень.

Вот мой пример:

SQL> create table test_tab as select rownum id, rpad('*', 2000, '*') text from all_objects;

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

SQL> alter table test_tab add constraint test_tab_pk primary key (id);

Таблица изменена.

SQL> exec dbms_stats.gather_table_stats(user, 'test_tab', cascade => true)

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

SQL> set autotrace traceonly
SQL> set timing on
SQL> select * from test_tab;

83692 строк выбрано.

Затрач.время: 00:00:09.34

План выполнения
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=CHOOSE (Cost=8264 Card=83692 Bytes=167802460)
   1    0   TABLE ACCESS (FULL) OF 'TEST_TAB' (Cost=8264 Card=83692 Bytes=167802460)

Статистика
----------------------------------------------------------
          0  recursive calls
          0  db block gets
      83706  consistent gets
      83692  physical reads
          0  redo size
    1274661  bytes sent via SQL*Net to client
      61730  bytes received via SQL*Net from client
       5581  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
      83692  rows processed

SQL> select id from test_tab;

83692 строк выбрано.

Затрач.время: 00:00:05.93

План выполнения
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=CHOOSE (Cost=40 Card=83692 Bytes=418460)
   1    0   INDEX (FAST FULL SCAN) OF 'TEST_TAB_PK' (UNIQUE) (Cost=40 Card=83692 Bytes=418460)

Статистика
----------------------------------------------------------
          0  recursive calls
          0  db block gets
       5915  consistent gets
        357  physical reads
          0  redo size
     949057  bytes sent via SQL*Net to client
      61730  bytes received via SQL*Net from client
       5581  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
      83692  rows processed

SQL> disc
Отсоединено от Oracle9i Enterprise Edition Release 9.2.0.7.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.7.0 - Production


_>Если говоритиь о заблуждениях, то будет тебе известно, что для приведенных тобой запросов будет использован full scan в любом случае.

full scan он разный бывает.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.