제목을보고좀황당하셨으리라고생각됩니다.
일단제목을이렇게만든것은많은분들이보시고많이적용을하시길바라는마음에서입니다.
제가ASP를접한지1년이넘어가고있지만주변에있는많은사람들이기존의방법에서
그리벗어나질못하고있습니다.
저는이번에저희회사가컨설팅을받아서정말ASP의새로운맛을보게되었습니다.
(주로DB에치중한것이었지만요..)
만약StaticSQL을잘쓰신다면일반적으로잘알려진방법
ASP에서StoredProcedure보다더나은성능을얻게되실수있으리라장담합니다.
글구DB를오라클로쓰시는분들께정말권해드리고싶습니다.
(Oracle과MTS는뻑(bug)가있다나요..)
자다음과같은순서로강의를진행하려고합니다.
1.StaticSQL에대해
2.StaticSQL이왜빠를까?
3.실질적인StaticSQL에대해
4.StaticSQL을마치며..
그럼1단원을시작해볼까요...
아참전ASP와Oracle기준으로이강좌를진행해나가겠습니다.
(이점유의하시길.)
1.StaticSQL에대해
*.StaticSQL이무엇일까?
우리는일반적으로쿼리를작성합니다.
만약아래와같은테이블이있다고생각을해보죠.
(예)
CREATETABLEemployee
(
empnovarchar2(4)primarykey,/*사원번호컬럼*/
empnamevarchar2(20)notnull,/*사원이름컬럼*/
empaddrvarchar2(200)notnull,/*사원주소컬럼*/
empcphonevarchar2(11),/*사원핸드폰컬럼*/
empstatusvarchar2(1)/*사원상태컬럼*/
);
위와같은사원테이블이있을때사번이44번인사람의정보를보고싶다고한다면
보통이런식으로쿼리를만들것입니다.-_-;;
(ex)SELECT*FROMemployeeWHEREempno="44"
만약사번이45인사람의정보를보고싶다면위의SQL에서
마지막비교되는상수값이44에서45로바꿜것입니다.
(SQL1)SELECT*FROMemployeeWHEREempno="44"
|
(SQL2)SELECT*FROMemployeeWHEREempno="45"
그런데데이터베이스에서는불행히도SQL1과SQL2를서로다른Query로
보고이것을새롭게파싱하고DB의SharedPool에는SQL1과SQL2가
각각다른내용으로써저장됩니다.
(참고:SharedPool이란컴퓨터에서CacheMemory와유사한것으로
컴퓨터에서어떤프로그램을실행시킬때필요한데이터를
Memory에올려서쓰는데그내용중일부는cachememory라는
곳에저장되어만약어떤데이터의요청이일어난다면
cachememory를먼저찾아보고내용이없다면memory에서
다시찾아서cachememory로올리는방식과아주유사합니다.
SharedPool은DB에서사용자가실행한SQL문이저장되는
영역입니다.그러므로만약사용자가SQL1을사용하고
이것을다시사용한다면DBMS는SharedPool에서먼저동일한
SQL이존재하는지찾고나서존재한다면이미파싱해놓은
내용을가져오고그렇지않다면다시파싱을하게됩니다.)
SQL1과SQL2는거의동일한문자열과빈칸등으로되어있지만
empno를비교하는상수가다르므로각각다른SQL이됩니다.
그렇다면SQL1과SQL2를동일한SQL로만들려면어떻게하면
될까요??
앗벌써눈치를채신분들이계시군요..
그렇습니다.
(SQL3)SELECT*FROMemployeeWHEREempno=:inputnum
위와같은SQL로대치될수있겠죠..
비교되는상수값의위치에다가변수를넣는거죠..
("무하하하,난역쉬똑똑해!"라고자만하시는분들있으시겠죠..)
(똑똑하십니다.d_(-_-;;)(GOOD))
근데위와같은SQL은토드나SQL*PLUS에서는사용할수있지만
일반적인ASP나VB에서는사용이불가능하답니다.
그래서ASP에서지원하는방식으로변수를선언해야겠죠..
여기서잠깐...
유식해지기위해서고급적인단어몇개를배워보기로하죠..
(제가전직장에서같이일한과장님과강남에서술을먹는데
그분이외국계회사에서일을하시는지라공부를빡시게하셔서
엄청고급약어(?)들을쓰시는데뽀대있어보이더군요..
아직도그단어들에대해서는정확한이해가~~~~~쿨럭....
윤과장님죄송해유...-_-;;;)
위의:inputnum이라고선언한것은parameterbinding이라고합니다.
parameterbinding하니까프로그래밍언어론시험칠때열씨미외웠던
기억이...제가실력은미진해도무늬는컴공이거든요..쿨럭-_-;;)
(참조)이렇게파라미터바인팅변수를사용하는SQL을대용량데이터베이스책에서는
StaticSQL이라고명명하고있습니다.
이것의원리는SQL1과SQL2는상수가empno를비교하는값에실제상수가들어가있는데
반해이것은메모리의주소값이들어가있다나요...(Maybe...^_^;;)
전옛날에배운C의Pointer가생각이나더군요..
포인터변수쓰면그곳에다어떤값들을넣을수있잖아요..
(좀유사하다고생각하지않으세요?-->아니라고생각하신다구요..그럼말구..)
저기서빨리본론을말해달라고돌던지시는분들이무지많으시군요..
앗죄송.
그럼본론은다음편에서
tobecontinue...
무하하..
곰탱이가..
참고자료출처
1.En-CoreWeb사이트
StaticSQL사용예제(VB에서ADO사용)작성자:김성준
참고서적
1.대용량데이터베이스
2.클릭하세요오라클8i
3.기타저의잡다한지식들(정확한지는보장못함)
p.s.글구저도데브칩을받고싶은데요..
혹시시간나시면데브칩50쿨럭^_^;;;(비굴모드)
혹시데브칩가지고책살수있나요???
곰탱이가...
틀린내용에대해서는가차없이꾸짖어주십시오.
poo97@nownuri.net으로메일을보내주십시오.
이글을퍼가실때는저에게연락을주시길...
(모든저작권은곰탱이에게귀속되어있습니다.쿨럭~~~~~)
일단제목을이렇게만든것은많은분들이보시고많이적용을하시길바라는마음에서입니다.
제가ASP를접한지1년이넘어가고있지만주변에있는많은사람들이기존의방법에서
그리벗어나질못하고있습니다.
저는이번에저희회사가컨설팅을받아서정말ASP의새로운맛을보게되었습니다.
(주로DB에치중한것이었지만요..)
만약StaticSQL을잘쓰신다면일반적으로잘알려진방법
ASP에서StoredProcedure보다더나은성능을얻게되실수있으리라장담합니다.
글구DB를오라클로쓰시는분들께정말권해드리고싶습니다.
(Oracle과MTS는뻑(bug)가있다나요..)
자다음과같은순서로강의를진행하려고합니다.
1.StaticSQL에대해
2.StaticSQL이왜빠를까?
3.실질적인StaticSQL에대해
4.StaticSQL을마치며..
그럼1단원을시작해볼까요...
아참전ASP와Oracle기준으로이강좌를진행해나가겠습니다.
(이점유의하시길.)
1.StaticSQL에대해
*.StaticSQL이무엇일까?
우리는일반적으로쿼리를작성합니다.
만약아래와같은테이블이있다고생각을해보죠.
(예)
CREATETABLEemployee
(
empnovarchar2(4)primarykey,/*사원번호컬럼*/
empnamevarchar2(20)notnull,/*사원이름컬럼*/
empaddrvarchar2(200)notnull,/*사원주소컬럼*/
empcphonevarchar2(11),/*사원핸드폰컬럼*/
empstatusvarchar2(1)/*사원상태컬럼*/
);
위와같은사원테이블이있을때사번이44번인사람의정보를보고싶다고한다면
보통이런식으로쿼리를만들것입니다.-_-;;
(ex)SELECT*FROMemployeeWHEREempno="44"
만약사번이45인사람의정보를보고싶다면위의SQL에서
마지막비교되는상수값이44에서45로바꿜것입니다.
(SQL1)SELECT*FROMemployeeWHEREempno="44"
|
(SQL2)SELECT*FROMemployeeWHEREempno="45"
그런데데이터베이스에서는불행히도SQL1과SQL2를서로다른Query로
보고이것을새롭게파싱하고DB의SharedPool에는SQL1과SQL2가
각각다른내용으로써저장됩니다.
(참고:SharedPool이란컴퓨터에서CacheMemory와유사한것으로
컴퓨터에서어떤프로그램을실행시킬때필요한데이터를
Memory에올려서쓰는데그내용중일부는cachememory라는
곳에저장되어만약어떤데이터의요청이일어난다면
cachememory를먼저찾아보고내용이없다면memory에서
다시찾아서cachememory로올리는방식과아주유사합니다.
SharedPool은DB에서사용자가실행한SQL문이저장되는
영역입니다.그러므로만약사용자가SQL1을사용하고
이것을다시사용한다면DBMS는SharedPool에서먼저동일한
SQL이존재하는지찾고나서존재한다면이미파싱해놓은
내용을가져오고그렇지않다면다시파싱을하게됩니다.)
SQL1과SQL2는거의동일한문자열과빈칸등으로되어있지만
empno를비교하는상수가다르므로각각다른SQL이됩니다.
그렇다면SQL1과SQL2를동일한SQL로만들려면어떻게하면
될까요??
앗벌써눈치를채신분들이계시군요..
그렇습니다.
(SQL3)SELECT*FROMemployeeWHEREempno=:inputnum
위와같은SQL로대치될수있겠죠..
비교되는상수값의위치에다가변수를넣는거죠..
("무하하하,난역쉬똑똑해!"라고자만하시는분들있으시겠죠..)
(똑똑하십니다.d_(-_-;;)(GOOD))
근데위와같은SQL은토드나SQL*PLUS에서는사용할수있지만
일반적인ASP나VB에서는사용이불가능하답니다.
그래서ASP에서지원하는방식으로변수를선언해야겠죠..
여기서잠깐...
유식해지기위해서고급적인단어몇개를배워보기로하죠..
(제가전직장에서같이일한과장님과강남에서술을먹는데
그분이외국계회사에서일을하시는지라공부를빡시게하셔서
엄청고급약어(?)들을쓰시는데뽀대있어보이더군요..
아직도그단어들에대해서는정확한이해가~~~~~쿨럭....
윤과장님죄송해유...-_-;;;)
위의:inputnum이라고선언한것은parameterbinding이라고합니다.
parameterbinding하니까프로그래밍언어론시험칠때열씨미외웠던
기억이...제가실력은미진해도무늬는컴공이거든요..쿨럭-_-;;)
(참조)이렇게파라미터바인팅변수를사용하는SQL을대용량데이터베이스책에서는
StaticSQL이라고명명하고있습니다.
이것의원리는SQL1과SQL2는상수가empno를비교하는값에실제상수가들어가있는데
반해이것은메모리의주소값이들어가있다나요...(Maybe...^_^;;)
전옛날에배운C의Pointer가생각이나더군요..
포인터변수쓰면그곳에다어떤값들을넣을수있잖아요..
(좀유사하다고생각하지않으세요?-->아니라고생각하신다구요..그럼말구..)
저기서빨리본론을말해달라고돌던지시는분들이무지많으시군요..
앗죄송.
그럼본론은다음편에서
tobecontinue...
무하하..
곰탱이가..
참고자료출처
1.En-CoreWeb사이트
StaticSQL사용예제(VB에서ADO사용)작성자:김성준
참고서적
1.대용량데이터베이스
2.클릭하세요오라클8i
3.기타저의잡다한지식들(정확한지는보장못함)
p.s.글구저도데브칩을받고싶은데요..
혹시시간나시면데브칩50쿨럭^_^;;;(비굴모드)
혹시데브칩가지고책살수있나요???
곰탱이가...
틀린내용에대해서는가차없이꾸짖어주십시오.
poo97@nownuri.net으로메일을보내주십시오.
이글을퍼가실때는저에게연락을주시길...
(모든저작권은곰탱이에게귀속되어있습니다.쿨럭~~~~~)
'DataBase' 카테고리의 다른 글
대용량 게시판 만들기 강좌 #3/4 (LIST) (0) | 2005.12.18 |
---|---|
아직도 Static SQL을 모르나?-2 (0) | 2005.12.18 |
아직도 Static SQL을 모르나?-4 (0) | 2005.12.18 |
아직도 Static SQL을 모르나?-3 (0) | 2005.12.18 |
동적 SQL의 축복과 저주 (0) | 2005.12.18 |