EXEC DBMS_STATS.gather_schema_stats(USER, cascade=> TRUE);

SELECT table_name, num_rows FROM user_tables;
현재 User의 모든 테이블에 대한 통계정보를 조사하고 나면 num_rows에 값이 들어가있게 됨.

Posted by g11000011
:
현제 집에서 이용하는 시스템의 경우 메모리가 6Gb 입니다만, 이를 어떻게하면 제대로 쓸수나 있는 것인가? 하는 물음에서 여기저기 찾아본 결과...

해결책은 64bit OS를 이용하는 것이란 결론에 이르게 되었습니다.


. 32bit OS인 윈도우XP는 기본적으로 4GB 까지의 주소공간까지만 핸들링 가능하며, 그 4GB중에서 2GB는 어플리케이션 2GB는 커널용으로 구분되어 있습니다.
. 64bit OS 윈도우XP 64bit에서 32bit 어플리케이션이 자체적으로 핸들링 할수 있는 메모리 한계는 4GB입니다. 충분히 큰 용량의 메모리를 가지고 있다면 XP 32bit 에 비해서 2배의 메모리를 하나의 어플리케이션이 이용할수 있게 되는 셈입니다.
. 64비트 Windows의 주소 공간에는 현재 실제적 이용에서 아무런 제약이 없으므로 네이티브 64bit 어플리케이션을 이용하는 경우에는 제한없는 램 영역을 활용할수 있습니다.



..... '제한없이 메모리를 이용할수 있다면 무엇이 좋은가?' 라고 하신다면, 그냥 이런 내용에는 신경 끄고 사시는게 좋습니다.
Posted by g11000011
:

sql index 의 이용

프로그래밍 2008. 3. 25. 19:36 |

조인방식이 HASH JOIN -> NESTED LOOP JOIN으로
데이타 엑섹스 경로는 FULL SCAN -> INDEX (RANGE SCAN) 으로 변경


튜닝전 Execution Plan (인덱스 생성 전 )
--------------------------------------------------------------------------------
   0      SELECT STATEMENT Optimizer=CHOOSE (Cost=92 Card=1 Bytes=105)
   1    0   SORT (GROUP BY) (Cost=92 Card=1 Bytes=105)
   2    1     VIEW (Cost=86 Card=1 Bytes=105)
   3    2       SORT (GROUP BY) (Cost=86 Card=1 Bytes=183)
   4    3         HASH JOIN (Cost=79 Card=1 Bytes=183)
   5    4           HASH JOIN (Cost=76 Card=1 Bytes=115)
   6    5             TABLE ACCESS (BY INDEX ROWID) OF 'table a' (Cost=1 Card=1 Bytes=65)
   7    6               INDEX (SKIP SCAN) OF 'table a' (UNIQUE) (Card=1)
   8    5             TABLE ACCESS (FULL) OF 'table b' (Cost=74 Card=1 Bytes=50)
   9    4           TABLE ACCESS (FULL) OF 'table c' (Cost=2 Card=1 Bytes=68)
   
  
CREATE INDEX [user 계정].[생성 INDEX명] ON [user 계정].[table b]([column x], [column y])
TABLESPACE [table space명];


튜닝후 Execution Plan (인덱스 생성 후 )
--------------------------------------------------------------------------------
   0      SELECT STATEMENT Optimizer=CHOOSE (Cost=19 Card=1 Bytes=105)
   1    0   SORT (GROUP BY) (Cost=19 Card=1 Bytes=105)
   2    1     VIEW (Cost=13 Card=1 Bytes=105)
   3    2       SORT (GROUP BY) (Cost=13 Card=1 Bytes=183)
   4    3         HASH JOIN (Cost=6 Card=1 Bytes=183)
   5    4           TABLE ACCESS (BY INDEX ROWID) OF 'table b' (Cost=2 Card=1 Bytes=50)
   6    5             NESTED LOOPS (Cost=3 Card=1 Bytes=115)
   7    6               TABLE ACCESS (BY INDEX ROWID) OF 'table a' (Cost=1 Card=1 Bytes=65)
   8    7                 INDEX (SKIP SCAN) OF 'PK_table a' (UNIQUE) (Card=1)
   9    6               INDEX (RANGE SCAN) OF '[생성 INDEX명]' (NON-UNIQUE) (Cost=1 Card=1)
  10    4           TABLE ACCESS (FULL) OF 'table c' (Cost=2 Card=1 Bytes=68)


무려 92에서 19로의 드라마틱한 퍼포먼스 향상.
이런 엄청난 차이라니. 공부해서 남주나요.

Posted by g11000011
: