본문 바로가기

04번. IT 힌트얻기

[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가 있다.. 더보기
SORT MERGE JOIN SORT MERGE JOIN 은 연결 고리에 이상이 있는 경우 대용량의 자료를 조인할 경우 인덱스의 치명적인 단점인 랜덤 액세스와 오버헤드가 Nested Loop Join 의 장점을 넘어서 버리는 경우에 적절하게 사용할 수 있는 조인 방법 -> Join 조건에 해당되는 컬럼에 인덱스가 없을 경우 Nested Loop에서는 Full 스캔하게 되어 엄청난 오버헤드를 가지게 된다. 이점을 해결하기 위해 단 두번의 Scan으로 처리가 가능한 Sort Merge Join이나 Hash Join이 생겨나게 된것 SORT MERGE JOIN은 조인이 되는 각각의 테이블 자료를 스캔방식으로 읽어들이거나 인덱스를 사용하여 메모리로 읽어들입니다. 읽혀진 두 테이블의 조인 집합은 연결 고리 칼럼에 대하여 각각 정렬을 수행한 .. 더보기
ORACLE NESTED LOOP JOIN ORACLE NESTED LOOP JOIN #1 from 새로쓴 대용량 데이터베이스 솔루션 | 이화식 1. NESTED LOOP JOIN JOIN의 한가지 방법이다. NESTED LOOP 란 단어는 DRIVING(먼저 읽어들이는 테이블) 데이터를 가지고 루프를 돌리기 때문이다. Rows Row Source Operation ------- --------------------------------------------------- 14 NESTED LOOPS (cr=48 r=0 w=0 time=1081 us) 14 TABLE ACCESS FULL EMP (cr=18 r=0 w=0 time=394 us) 14 TABLE ACCESS BY INDEX ROWID DEPT (cr=30 r=0 w=0 time=52.. 더보기
SUM(DECODE...) 문제 1번은 GROUP BY의 활용에 대한 예제로서 보기에는 문제가 어려워 보이지만 조금만 고민하고, 조금만 생각을 바꿔본다면 하나의 Query로 처리가 된다는 것을 볼 수 있다. 절차적인 사고방식은 벗어버리고, 집합적인 사고를 가진다면 프로그램으로 데이터를 가져와서 처리하는 것보다 훨씬 더 쉽게, 그리고 간단하게 처리할 수 있다는 것을 느끼기 바란다. 문제 2번을 풀어보면 답안 2-1과 답안 2-2는 같은 합계가 나온다. 그러나 처리 일량을 생각해보면 2-1의 쿼리보다는 2-2의 쿼리가 좀 더 좋은 쿼리라 말할 수 있다. 잠시 왜 2-2 Query가 더 좋은 Query가 더 좋은 Query라 하는지 생각해 보기 바란다. 생각해 보면 아주 사소한 부분이라고도 할 수 있겠으나 분명 차이는 있다. 2-1은 .. 더보기
자바실습1) 5명의 점수 입력받아 총점,평균 구하기 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Test{ public static void main(String []args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int a[][] = new int[5][3]; int sum[] = new int[5]; double avg[] = new double[5]; String t[] = {"국어","영어","수학"}; for(int i=0; i 더보기
레지스터와 메모리의 차이 메모리를 얘기할 때 가장 흔히 접하는 PC용 RAM을 떠올릴 것이다. 이러한 RAM은 일반적으로 컴퓨터의 주기억장치로 사용하며 인스트럭션을 로드하여 저장하는 장치로 주로 사용한다. 도스 시절을 경험해 본 이들은 640킬로바이트의 메모리 제약으로 인해 용량이 큰 프로그램을 실행하기 위해 메모리 상주 프로그램을 최대한 줄이는 등 메모리 튜닝을 했던 기억이 있을 것이다. 우리가 흔히 RAM이라고 하는 이 메모리는 Dynamic RAM이라고 하는 DRAM으로 이루어져 있으며, DRAM과 대조되는 특성을 지니고 있는 소자가 바로 플립플롭으로 구성된 Static RAM, 줄여서 SRAM이다. DRAM은 MOS 트랜지스터 안에 있는 콘덴서에 전하의 형태로 저장이 되며 이 전하는 시간이 흐름에 따라 방전되는 특성이 있.. 더보기
1. Function의 종류 더보기