반응형

* SELECT 문의 처리 과정

1) parsing
   - SQL문장을 기계어로 바꾸는 과정
     1. 문법검사
        - 맞는 문법인지 검사
     2. 의미검사
        - emp테이블이 있는지 확인, scott가 emp 테이블의 액세스할수 있는 권한이 있는지 확인

   - parsing의 경우  CPU를 많이 사용하기 때문에 파싱한 결과를 공유풀(shared pool)에 올려두게 됨.

   - 공유풀에 올리는사항  => 다음에 똑같은것이 오면 파싱과정을 생략하기 위해서
    1. SQL문장
    2. 실행계획
    3. Parse Tree(기계어)

2) execute
   메모리에 로드 처리 실행

3) fetch
   SQL결과를 클라이언트에서 전달하는 과정

 

# 쿼리 실행후  실제 공유 메모리에 해당 쿼리문이 올라 갔는지 확인 하기

C:\>sqlplus "/as sysdba"

SQL*Plus: Release 10.2.0.3.0 - Production on 수 3월 16 18:55:24 2011

Copyright (c) 1982, 2006, Oracle.  All Rights Reserved.


다음에 접속됨:
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Production
With the Partitioning, OLAP and Data Mining options

SQL> select  ename, sal from scott.emp where empno=7788;

ENAME             SAL
---------- ----------
SCOTT            3000

SQL> -- shared pool에 있는 SQL문장 확인
SQL> select sql_text from v$sql where sql_text like '%scott.emp%';

SQL_TEXT
--------------------------------------------------------------------------------
select  ename, sal from scott.emp where empno=7788
select sql_text from v$sql where sql_text like '%scott.emp%'

SQL>

 


# SQL에서 똑같은 문장이란?
  1. 대소문자구분
  2. 공백, 들여쓰기, 탭구분
  3. 리터럴 SQL구문 => 바인드 변수 처리

 


# 대소문자구분을 하였을경우 공유메모리에 2개가 존재하는것 확인

C:\>sqlplus "/as sysdba"

SQL*Plus: Release 10.2.0.3.0 - Production on 수 3월 16 18:55:24 2011

Copyright (c) 1982, 2006, Oracle.  All Rights Reserved.


다음에 접속됨:
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Production
With the Partitioning, OLAP and Data Mining options

SQL> select  ename, sal from scott.emp where empno=7788;

ENAME             SAL
---------- ----------
SCOTT            3000

SQL> -- shared pool에 있는 SQL문장 확인
SQL> select sql_text from v$sql where sql_text like '%scott.emp%';

SQL_TEXT
--------------------------------------------------------------------------------
select  ename, sal from scott.emp where empno=7788
select sql_text from v$sql where sql_text like '%scott.emp%'

SQL> -- 대문자로 해당쿼리문을 실행시
SQL> SELECT ENAME, SAL FROM scott.emp WHERE EMPNO=7788;

ENAME             SAL
---------- ----------
SCOTT            3000

SQL>  -- shared pool에 있는 SQL문장 확인
SQL>  select sql_text from v$sql where sql_text like '%scott.emp%';

SQL_TEXT
--------------------------------------------------------------------------------
select  ename, sal from scott.emp where empno=7788
select sql_text from v$sql where sql_text like '%scott.emp%'
 select sql_text from v$sql where sql_text like '%scott.emp%'
SELECT ENAME, SAL FROM scott.emp WHERE EMPNO=7788

SQL>


SQL> -- 공백을 많이 띄워서 실행시
SQL> select  ename,                   sal from scott.emp where empno=7788;

ENAME             SAL
---------- ----------
SCOTT            3000

SQL>  -- shared pool에 있는 SQL문장 확인
SQL>  select sql_text from v$sql where sql_text like '%scott.emp%';

SQL_TEXT
--------------------------------------------------------------------------------
select  ename, sal from scott.emp where empno=7788
select sql_text from v$sql where sql_text like '%scott.emp%'
 select sql_text from v$sql where sql_text like '%scott.emp%'
SELECT ENAME, SAL FROM scott.emp WHERE EMPNO=7788
select  ename,                   sal from scott.emp where empno=7788

SQL>

 

SQL> -- where조건절의 값을 바꿨을경우
SQL> select  ename, sal from scott.emp where empno=7902;

ENAME             SAL
---------- ----------
FORD             3000

SQL>  -- shared pool에 있는 SQL문장 확인
SQL>  select sql_text from v$sql where sql_text like '%scott.emp%';

SQL_TEXT
-------------------------------------------------------------------------------
select  ename, sal from scott.emp where empno=7788
select sql_text from v$sql where sql_text like '%scott.emp%'
 select sql_text from v$sql where sql_text like '%scott.emp%'
SELECT ENAME, SAL FROM scott.emp WHERE EMPNO=7788
select  ename, sal from scott.emp where empno=7902
select  ename,                   sal from scott.emp where empno=7788

6 개의 행이 선택되었습니다.

SQL>

 



 

반응형
Posted by 공간사랑
,