본문 바로가기

04번. IT 힌트얻기/▶ DB/ SQL

[SQL고수되기] 일곱번째 이야기 출처: 네이버지식인 노하우 http://kin.naver.com/knowhow/detail.nhn?d1id=8&dirId=8&docId=553042&qb=U1FM6rOg7IiY65CY6riwIC0g7J286rOx67KI7Ke47J207JW86riw&enc=utf8&section=kin&rank=1&search_sort=0&spq=0 CREATE TABLE시에 Tablespace부분 문제 생기실수도 있으실듯 없어서리.. 제가 깜밖했네요 이렇게 만들시면 됩니다. CONN SYSTEM; CREATE TABLESPACE TS00 DATAFILE 'D:\oracle\product\10.2.0\oradata\oracle\TS00.dbf' SIZE 1000M AUTOEXTEND OFF LOGGING ONLINE PE.. 더보기
[SQL고수되기] 여섯번째 이야기 출처: 네이버지식인 노하우 http://kin.naver.com/knowhow/detail.nhn?d1id=8&dirId=8&docId=552927&qb=U1FM6rOg7IiY65CY6riw&enc=utf8&section=kin&rank=12&search_sort=0&spq=0 오늘부터 어제 만든 테이블들을 활용하여 쿼리(논리Entity)를 만들어보겠습니다. 그전에 논리 Entity에 대한 정의에 대해 상세하게 다뤄볼까합니다. WORK_INF(출퇴근정보) ------------------------------------------- 출근일자 사번 출근일시 퇴근일시 (ATTN_YMD) (SNO) (CHECK_IN) (CHECK_OUT) ---------------------------------------.. 더보기
[SQL고수되기] 다섯번째 이야기 출처 : 네이버지식인 노하우 http://kin.naver.com/knowhow/detail.nhn?d1id=8&dirId=8&docId=552905&qb=U1FM6rOg7IiY65CY6riw&enc=utf8&section=kin&rank=3&search_sort=0&spq=0 지난 이야기에서 생성한 테이블 정보들입니다. 1.아르바이트생 정보 CREATE TABLE EMP_INF ( EMP_NO CHAR (8 ), /* 사번:년(2)+월(2)+일번(4) */ SNAME VARCHAR2(50), /* 이름 */ PHONE VARCHAR2(20), /* 핸드폰 */ ... ... CONSTRAINT EMP_INF_PK PRIMARY KEY (EMP_NO) USING INDEX TABLESPACE TS00 P.. 더보기
[SQL고수되기] 네번째 이야기 출처: 네이버지식인 노하우 http://kin.naver.com/knowhow/detail.nhn?d1id=8&dirId=8&docId=552877&qb=U1FM6rOg7IiY65CY6riw&enc=utf8&section=kin&rank=6&search_sort=0&spq=0 이번 이야기에서는 저번에 이어 테이블을 Create할 것입니다. 그나저나 다른 두개 테이블에대해서 PK는 만들어오셨는지요. 참~~ 쉽죠~잉 ^^ 가장 중요한건 EMP_INF 테이블하곤 관리 자체가 다르다는 점입니다. 그 이유는 PK의 첫번째가 시기정보가 들어간다는 점입니다. 이게 굉장히 중요한데요.. 앞으로 차차 설명드리겠습니다. 그럼 테이블을 만들어봐야 겠지요? Table 생성은 보통 이렇게들 하시지요? CREATE TABLE E.. 더보기
[SQL고수되기] 세번째 이야기 출처 : 네이버지식인 노하우 http://kin.naver.com/knowhow/detail.nhn?d1id=8&dirId=8&docId=552842&qb=U1FM6rOg7IiY65CY6riw&enc=utf8&section=kin&rank=7&search_sort=0&spq=0 테이블 설계에 대해서 이야기해볼까합니다. 앞으로 이야기할 내용은 쿼리가 잘 수행되기 위해 고려해야 할 내용이라는 점을 다시 한 번 말씀드립니다. 몇달전에 제가 현재 소속되어 있는 부서로 한 통의 메일이 전달되었습니다. 현업(설비기술팀)에서 온 짜증이 섞인 내용이었습니다. 이과장님 저희 시스템으로 조회하면 RawData가 잘 나오는데 A시스템을 -20시간 검색하면 조회가 잘되지 않습니다. 어쩌구 저쩌구.. 빠른 조치 부탁드립니다. .. 더보기
[SQL고수되기] 두번째 이야기 출처 : 네이버지식인 노하우 (http://kin.naver.com/knowhow/detail.nhn?d1id=8&dirId=8&docId=552804&qb=U1FMIOqzoOyImOuQmOq4sA==&enc=utf8&section=kin&rank=2&search_sort=0&spq=0) 첫번째 이야기에서 물리/논리 엔티티라는 말이 나왔었습니다. 이것에 대해 구체적으로 이야기를 해볼까합니다. 물론 쿼리를 잘 짜는 것도 중요합니다. 그러나 가장 중요한 것은 물리적인 Entity입니다. 최초에 DB설계시에 논리적으로 RDBMS에 맞게 분석을 통해 잘 정리된(정형화된, 구조화된, 무결성의...) 데이터일수록 쿼리 설계 시 막강한 영향력을 발휘하게 됩니다. 쿼리를 짜려다 보니 헉, 이건 생각 못했네, 테이블 바.. 더보기
[SQL고수되기] 첫번째 이야기 출처 : 네이버지식인 노하우 http://kin.naver.com/knowhow/detail.nhn?d1id=8&dirId=8&docId=552770&qb=c3FsIOqzoOyImOuQmOq4sA==&enc=utf8&section=kin&rank=1&search_sort=0&spq=0 으아~ Database와 동고동락한지 벌써 13년이네요. 정말 10년전과 비교하면 많이 변한듯합니다. 걱정이 되는 것은 글을 많이 보긴 했지만 집필해보진 않았기에 오타나 이야기 진행상에 미숙한 점이 있진 않을까 우려되기도 합니다. 하지만 조금이나마 시작하시는 분들에 도움이 되고자 한것이니 재미없고 따분한 내용일지라도 이쁘게 봐주시고 잘 봐주셨으면 하는 맘입니다. 지금까지 수많은 Database를 접해왔지만 제 입맛에 딱들어.. 더보기
[SQL Function] INSTR -- INSTR(A,B,C,D) : A(str)에서 B(str)를 (A의) 인덱스 C(int)부터 D(int)번째 나올때 까지 찾는다 예시) SELECT SUBSTR(MSG,1,INSTR(MSG,'|',1,1)-1) MSG_1, SUBSTR(MSG, INSTR(MSG,'|',1,1)+1, INSTR(MSG,'|',1,2)-INSTR(MSG,'|',1,1)-1)MSG_2, SUBSTR(MSG, INSTR(MSG,'|',1,2)+1, INSTR(MSG,'|',1,3)-INSTR(MSG,'|',1,2)-1)MSG_3, SUBSTR(MSG, INSTR(MSG,'|',1,3)+1, INSTR(MSG,'|',1,4)-INSTR(MSG,'|',1,3)-1)MSG_4, SUBSTR(MSG, INSTR(MSG,'|',1.. 더보기
대용량 데이터베이스를 위한 어드바이스 데이터베이스를 사용하면서 성능 문제로 어려움을 겪고 있는 사이트가 지금도 존재한다. 그리고 과거에 이러한 성능 문제를 경험해본 사이트도 적지 않을 것이다. 과거와 달리 지금은 많은 데이터베이스들이 TB 이상의 대용량 데이터베이스로 변화하고 있으므로 이러한 성능 저하 현상은 더욱 심화되고 있다. 이에 대한 해결 방법은 다양하지만 변함없이 그 중심에는 데이터베이스를 엑세스하는 SQL이 있다. 지금은 성능을 고려한 SQL 최적화에 시간과 관심을 아끼지 말아야 할 때이다. 악성 프로젝트를 주로 담당해온 필자는 다수의 악성 프로젝트를 지원하면서 악성 프로젝트의 몇 가지 공통점을 발견하게 되었다. 악성 프로젝트의 공통점 중 하나는 시스템 오픈시 항상 성능 저하의 문제를 동반하는 경우가 많다는 것이다. 성능 저하의 .. 더보기
HASH JOIN SELECT .... FROM aaa A, bbb B WHERE A.ID = B.ID AND A.TYPE = '0' AND B.NODE_TYPE = 'C'; A 테이블과 B 테이블이 각각 상수 조건을 가지고 각각의 JOIN 대상이 되는 집합을 구성하는 데, A 테이블은 A.TYPE = '0' 조건만을 가지고 JOIN을 위한 중간 집합을 만든다. 만약 A.TYPE을 선행 컬럼으로 하는 INDEX가 있다면 해당 INDEX를 사용하여 ACCESS하고 없다면 Full Index Scan 또는 Full Table Scan을 통해 중간 집합을 구성한다. B 테이블은 B.NODE_TYPE = 'C' 조건만을 가지고 JOIN을 위한 중간 집합을 만든다. 만약, B.NODE_TYPE을 선행 컬럼으로하는 INDEX가 있다.. 더보기