SlideShare une entreprise Scribd logo
1  sur  8
DB활용가이드
           2012. 10
    DB PART - ARKIZ
SCHEDULE


 1.   SQL GUIDE
        ①   SQL작성시 유의사항 – SQL 활용가이드 참고
        ②   JOIN
        ③   SUBQUERY
        ④   Optmizer의 이해
        ⑤   EXPLAIN

 2.   Query Tuning
        ①   Clustring Index, Covering Index
        ②   UNION, UNION ALL
        ③   ANY, EXISTS

 3.   Data Modeling
        ①   엔터티, 속성, 식별자, 관계

 4.   Logical Modeling
        ①   작도방법, 보는 방법

 5.   Physical Modeling
        ①   규칙 및 유의사항
STRUCTURED QUERY LANGUAGE, 구조화 질의어



 Standard?

  SQL-86     First published by ANSI. Ratified by ISO in 1987

  SQL-89     Minor revision

  SQL-92 or SQL2 - Major revision (ISO 9075) - MySQL start

  SQL:1999 or SQL3

  SQL:2003

  SQL:2006

  SQL:2008

  SQL:2011 ISO/IEC 9075-1:2011 CHE 172

                                               http://en.wikipedia.org/wiki/SQL
BEFORE WRITE QUERY…


어떻게 처리할 것인지를 먼저 생각하지 말고        무엇을    할 것인지를 먼저 파악하라.


그러한 결과 값을 얻기 위해    어떤 집합 이 필요한지를       찾아라.

필요한 집합이   논리적 으로    가능한지를 확인한다. 그러나 그 집합을 구체적으로 어떻게 생성할 것인지는 아직 생각하지
마라. 구체적인 생성 방법은 나중에 해도 충분하다.

원하는 집합이 생성 가능하다면 그 전체 집합을 마치         하나의 테이블로 간주 하라.         다시 말하면 원하는 집합을 테이
블에 넣었다고 생각하라. 그러면 지금부터는 하나의 테이블에 있는 정보를 가공 처리하는 단순한 형태가 된다.

추출되어야 할 결과 집합의 로우 단위 를               명확히 해라. 즉, 어떤 단위로 중분류를 해야 하는가(G roup by ) 를 결
정하라.

한 레코드씩 추출될 추출 단위( 중분류) 별로 내부에 속한 실제 로우들의 가공 처리 방법을 결정한다. 각각의 레코드마다 여
러 개의 실제 로우가 모여서 한 레코드가 되는 것이므로 여러 개의 실제 로우를 경우에 따라 어떤 방법으로 가공시키라는
것은 곧 SUM( x x x x ) 문 에 서 'x x x x '로 표시된 부분에 각 로우마다 해당되는 경우의 수를 처리 하는 것이다.

추출한 항목이 완성되었으 면 남겨 두었던 전체 집합을 구할 방법을 구체적으로 생각한다.
조인 이나 UNION    등을 활용하되    액세스 경로의 양호한 정도를 감안 한다.

SQ L을 수행시켜 가면서 약간의 보정을 통해 결론에 도달한다. 이때         수행 속도 에     대한 대비책도 같이    테스트    해야 한
다.

                                                      - 대용량 데이터베이스 솔루션 Ⅱ의 1장 89페이지 중에서
JOIN


MySQL JOIN Syntax
                                                                                      manual comment…
    table_references: table_reference [, table_reference] ...
                                                                                      •   table_factor 구문은 SQL 표준에 비해 확장 되었다.
    table_reference: table_factor | join_table
                                                                                      •   MySQL에서, CROSS JOIN 은 INNER JOIN과 동등하다. 표준 SQL에서
    table_factor:                                                                         는 그렇지 않다. INNER JOIN은 ON 절과 함께 쓰이며 CROSS JOIN은
          tbl_name [[AS] alias] [index_hint_list]                                         그렇지 않다.
       | table_subquery [AS] alias
       | ( table_references )                                                         •   STRAIGHT_JOIN 은 왼쪽 테이블이 오른쪽 테이블보다 항상 먼저 읽힌
       | { OJ table_reference LEFT OUTER JOIN table_reference                             다는 점을 제외하면 JOIN과 동일하다. JOIN optimizer가 테이블을 잘못
             ON conditional_expr }                                                        된 순서로 놓을 경우에 사용될 수 있다.

    join_table:                                                                       MySQL 5.0.12에서 변경된 JOIN연산
         table_reference   [INNER | CROSS] JOIN table_factor [join_condition]
       | table_reference   STRAIGHT_JOIN table_factor                                 •   NATURAL 이나 USING join의 컬럼들은 이전 버전과 다를 수 있다.
       | table_reference   STRAIGHT_JOIN table_factor ON conditional_expr             •   SQL:2003표준과 비교하여 MySQL에서의 확장은 MySQL이 NATURAL
       | table_reference   {LEFT|RIGHT} [OUTER] JOIN table_reference join_condition       이나USING join의 common 컬럼 들을 조절 할수 있게 하였는데 이는 표
       | table_reference   NATURAL [{LEFT|RIGHT} [OUTER]] JOIN table_factor               준 SQL문에서는 허용되지 않는다.
    join_condition:
         ON conditional_expr
       | USING (column_list)                                                          + arkiz comment…

    index_hint_list:                                                                  •   MySQL은 기본적으로 Nested Join을 수행한다.
       index_hint [, index_hint] ...                                                          • FROM절의 테이블중 index가 없는 테이블이 구동테이블
                                                                                              • 둘 다 인덱스가 있는 경우 가장 왼쪽부터(표준은 오른쪽부터)
    index_hint:
         USE {INDEX|KEY}                                                              •   Table Driving은 FROM절 가장 왼쪽 테이블부터 구동된다.
           [FOR {JOIN|ORDER BY|GROUP BY}] ([index_list])
       | IGNORE {INDEX|KEY}                                                           •   STRAIGHT_JOIN, index hint 는 가급적 사용하지 않도록 하며, 필요 시
           [FOR {JOIN|ORDER BY|GROUP BY}] (index_list)                                    DB파트와 상의하여 사용한다.
       | FORCE {INDEX|KEY}
           [FOR {JOIN|ORDER BY|GROUP BY}] (index_list)                                •   외부조인시 LEFT, RIGHT JOIN 절 뒤에 오는 table 의 해당하는 컬럼이
                                                                                          WHERE절에서 언급되면 외부조인은 내부조인문으로 변경 될 수 있다.
    index_list: index_name [, index_name] ...
SUBQUERY

subquery sample                                                     Scalar subquery
                                                                    - SELECT List절에 한 개 column 값만을 반환

SELECT
  (SELECT                                                           Inline view
     column2                                  Scalar subquery
   FROM table                                                       -   FROM 절에 레코드 리스트를 반환
   WHERE column1 = a.column1)
FROM (SELECT
         columns                              Inline view           Subquery
       FROM table) AS a                                             - SELECT statement에 포함하는 또 다른 SELECT
WHERE column1 > (SELECT value
                 FROM table                   subquery              statement
                 WHERE column2 = 1)
  AND column2 > (SELECT value
                 FROM table                   Correlated subquery   Correlated subquery
                 WHERE column2 = a.column1)                         - FROM 절에 레코드 리스트를 반환


* 적용 기준(권장사항)

1. Select List Scalar Subquery를 수행할 결과집합이 대량이 아닌 경우

2. 코드성 테이블의 조인이 많아 실행계획이 복잡해져 제어가 어려운 경우

3. 코드성 테이블에서 명칭만 가져오는 경우 (단, 코드에서 명칭만 가져오더라도 결과 집합이 대량이면 스칼라 서브쿼리가 불리할
수 있으므로 대량인 경우 조인을 사용할 것)

4. 한 개의 테이블에서 복수 개의 컬럼을 가져오는 경우 스칼라 서브쿼리(두개의 컬럼을 ||로 묶어서 한 개의 컬럼을 리턴)를 사용
하지 말고 조인을 사용하도록 함
OPTIMIZER?
EXPLAIN

Contenu connexe

En vedette

SQL쿼리튜닝팁 - 허성
SQL쿼리튜닝팁 - 허성SQL쿼리튜닝팁 - 허성
SQL쿼리튜닝팁 - 허성ETRIBE_STG
 
(130105) #fitalk trends in d forensics (dec, 2012)
(130105) #fitalk   trends in d forensics (dec, 2012)(130105) #fitalk   trends in d forensics (dec, 2012)
(130105) #fitalk trends in d forensics (dec, 2012)INSIGHT FORENSIC
 
효율적인Sql작성방법 3주차
효율적인Sql작성방법 3주차효율적인Sql작성방법 3주차
효율적인Sql작성방법 3주차희동 강
 
효율적인Sql작성방법 2주차
효율적인Sql작성방법 2주차효율적인Sql작성방법 2주차
효율적인Sql작성방법 2주차희동 강
 
효율적인Sql작성방법 4주차
효율적인Sql작성방법 4주차효율적인Sql작성방법 4주차
효율적인Sql작성방법 4주차희동 강
 
(Fios#03) 2. 네트워크 가상화 환경에서의 침해대응
(Fios#03) 2. 네트워크 가상화 환경에서의 침해대응(Fios#03) 2. 네트워크 가상화 환경에서의 침해대응
(Fios#03) 2. 네트워크 가상화 환경에서의 침해대응INSIGHT FORENSIC
 
System hacking basics
System hacking basicsSystem hacking basics
System hacking basicsgnomekr
 
[20140830, Pycon2014] NetworkX를 이용한 네트워크 분석
[20140830, Pycon2014] NetworkX를 이용한 네트워크 분석[20140830, Pycon2014] NetworkX를 이용한 네트워크 분석
[20140830, Pycon2014] NetworkX를 이용한 네트워크 분석Kyunghoon Kim
 
Pdf 이교수의 멘붕하둡_pig
Pdf 이교수의 멘붕하둡_pigPdf 이교수의 멘붕하둡_pig
Pdf 이교수의 멘붕하둡_pigMichelle Hong
 
모바일 게임 보안
모바일 게임 보안모바일 게임 보안
모바일 게임 보안TOAST_NHNent
 
[White Paper] SDN 기반 공격 탐지차단 강화를 위한 네트워크 관리 정보 구성 방안
[White Paper] SDN 기반 공격 탐지차단 강화를 위한 네트워크 관리 정보 구성 방안[White Paper] SDN 기반 공격 탐지차단 강화를 위한 네트워크 관리 정보 구성 방안
[White Paper] SDN 기반 공격 탐지차단 강화를 위한 네트워크 관리 정보 구성 방안NAIM Networks, Inc.
 
가장 심각한 웹 애플리케이션 보안 위험 10가지-2013
가장 심각한 웹 애플리케이션 보안 위험 10가지-2013가장 심각한 웹 애플리케이션 보안 위험 10가지-2013
가장 심각한 웹 애플리케이션 보안 위험 10가지-2013봉조 김
 
Sql study 20101113 유혜원
Sql study 20101113 유혜원Sql study 20101113 유혜원
Sql study 20101113 유혜원혜원 유
 
HTML5_security_(next_generation_threats)
HTML5_security_(next_generation_threats)HTML5_security_(next_generation_threats)
HTML5_security_(next_generation_threats)한익 주
 
SDN입문 (Overlay and Underlay)
SDN입문 (Overlay and Underlay)SDN입문 (Overlay and Underlay)
SDN입문 (Overlay and Underlay)NAIM Networks, Inc.
 
네트워크 후생 Network Welfare
네트워크 후생 Network Welfare네트워크 후생 Network Welfare
네트워크 후생 Network WelfareJeong-Soo KANG
 

En vedette (20)

SQL쿼리튜닝팁 - 허성
SQL쿼리튜닝팁 - 허성SQL쿼리튜닝팁 - 허성
SQL쿼리튜닝팁 - 허성
 
(130105) #fitalk trends in d forensics (dec, 2012)
(130105) #fitalk   trends in d forensics (dec, 2012)(130105) #fitalk   trends in d forensics (dec, 2012)
(130105) #fitalk trends in d forensics (dec, 2012)
 
Korean Word Network
Korean Word NetworkKorean Word Network
Korean Word Network
 
Sdn and Security
Sdn and SecuritySdn and Security
Sdn and Security
 
효율적인Sql작성방법 3주차
효율적인Sql작성방법 3주차효율적인Sql작성방법 3주차
효율적인Sql작성방법 3주차
 
효율적인Sql작성방법 2주차
효율적인Sql작성방법 2주차효율적인Sql작성방법 2주차
효율적인Sql작성방법 2주차
 
효율적인Sql작성방법 4주차
효율적인Sql작성방법 4주차효율적인Sql작성방법 4주차
효율적인Sql작성방법 4주차
 
Welcome to python
Welcome to pythonWelcome to python
Welcome to python
 
(Fios#03) 2. 네트워크 가상화 환경에서의 침해대응
(Fios#03) 2. 네트워크 가상화 환경에서의 침해대응(Fios#03) 2. 네트워크 가상화 환경에서의 침해대응
(Fios#03) 2. 네트워크 가상화 환경에서의 침해대응
 
System hacking basics
System hacking basicsSystem hacking basics
System hacking basics
 
[20140830, Pycon2014] NetworkX를 이용한 네트워크 분석
[20140830, Pycon2014] NetworkX를 이용한 네트워크 분석[20140830, Pycon2014] NetworkX를 이용한 네트워크 분석
[20140830, Pycon2014] NetworkX를 이용한 네트워크 분석
 
Pdf 이교수의 멘붕하둡_pig
Pdf 이교수의 멘붕하둡_pigPdf 이교수의 멘붕하둡_pig
Pdf 이교수의 멘붕하둡_pig
 
모바일 게임 보안
모바일 게임 보안모바일 게임 보안
모바일 게임 보안
 
[White Paper] SDN 기반 공격 탐지차단 강화를 위한 네트워크 관리 정보 구성 방안
[White Paper] SDN 기반 공격 탐지차단 강화를 위한 네트워크 관리 정보 구성 방안[White Paper] SDN 기반 공격 탐지차단 강화를 위한 네트워크 관리 정보 구성 방안
[White Paper] SDN 기반 공격 탐지차단 강화를 위한 네트워크 관리 정보 구성 방안
 
가장 심각한 웹 애플리케이션 보안 위험 10가지-2013
가장 심각한 웹 애플리케이션 보안 위험 10가지-2013가장 심각한 웹 애플리케이션 보안 위험 10가지-2013
가장 심각한 웹 애플리케이션 보안 위험 10가지-2013
 
Sql study 20101113 유혜원
Sql study 20101113 유혜원Sql study 20101113 유혜원
Sql study 20101113 유혜원
 
HTML5_security_(next_generation_threats)
HTML5_security_(next_generation_threats)HTML5_security_(next_generation_threats)
HTML5_security_(next_generation_threats)
 
SDN입문 (Overlay and Underlay)
SDN입문 (Overlay and Underlay)SDN입문 (Overlay and Underlay)
SDN입문 (Overlay and Underlay)
 
한호정
한호정한호정
한호정
 
네트워크 후생 Network Welfare
네트워크 후생 Network Welfare네트워크 후생 Network Welfare
네트워크 후생 Network Welfare
 

Similaire à Db활용가이드

SQL 튜닝에 Dictionary View 활용하기 Part2_Wh oracle
SQL 튜닝에 Dictionary View 활용하기 Part2_Wh oracleSQL 튜닝에 Dictionary View 활용하기 Part2_Wh oracle
SQL 튜닝에 Dictionary View 활용하기 Part2_Wh oracle엑셈
 
실무로 배우는 시스템 성능 최적화 Ch6
실무로 배우는 시스템 성능 최적화 Ch6실무로 배우는 시스템 성능 최적화 Ch6
실무로 배우는 시스템 성능 최적화 Ch6HyeonSeok Choi
 
[2015-06-26] Oracle 성능 최적화 및 품질 고도화 3
[2015-06-26] Oracle 성능 최적화 및 품질 고도화 3[2015-06-26] Oracle 성능 최적화 및 품질 고도화 3
[2015-06-26] Oracle 성능 최적화 및 품질 고도화 3Seok-joon Yun
 
(SQL힌트튜닝,온라인화상교육#3회차,강의자료,12/22)중첩루프조인개요,USE_NL, ORDERED, USE_NL_WITH_INDEX_오...
(SQL힌트튜닝,온라인화상교육#3회차,강의자료,12/22)중첩루프조인개요,USE_NL, ORDERED, USE_NL_WITH_INDEX_오...(SQL힌트튜닝,온라인화상교육#3회차,강의자료,12/22)중첩루프조인개요,USE_NL, ORDERED, USE_NL_WITH_INDEX_오...
(SQL힌트튜닝,온라인화상교육#3회차,강의자료,12/22)중첩루프조인개요,USE_NL, ORDERED, USE_NL_WITH_INDEX_오...탑크리에듀(구로디지털단지역3번출구 2분거리)
 
[오픈소스컨설팅]Day #3 MySQL Monitoring, Trouble Shooting
[오픈소스컨설팅]Day #3 MySQL Monitoring, Trouble Shooting[오픈소스컨설팅]Day #3 MySQL Monitoring, Trouble Shooting
[오픈소스컨설팅]Day #3 MySQL Monitoring, Trouble ShootingJi-Woong Choi
 
Database 튜닝 교육 110124
Database 튜닝 교육 110124Database 튜닝 교육 110124
Database 튜닝 교육 110124한 경만
 
파이썬 sqlite 이해하기
파이썬 sqlite 이해하기파이썬 sqlite 이해하기
파이썬 sqlite 이해하기Yong Joon Moon
 
#25.SQL초보에서 Schema Objects까지_구로IT학원/국비지원IT학원추천/구로디지털단지IT학원/재직자환급교육추천
#25.SQL초보에서 Schema Objects까지_구로IT학원/국비지원IT학원추천/구로디지털단지IT학원/재직자환급교육추천#25.SQL초보에서 Schema Objects까지_구로IT학원/국비지원IT학원추천/구로디지털단지IT학원/재직자환급교육추천
#25.SQL초보에서 Schema Objects까지_구로IT학원/국비지원IT학원추천/구로디지털단지IT학원/재직자환급교육추천탑크리에듀(구로디지털단지역3번출구 2분거리)
 
제6장 테이블 조인
제6장 테이블 조인제6장 테이블 조인
제6장 테이블 조인sang doc Lee
 
제5장 집계함수, 그룹함수 사용하기
제5장 집계함수, 그룹함수 사용하기제5장 집계함수, 그룹함수 사용하기
제5장 집계함수, 그룹함수 사용하기sang doc Lee
 

Similaire à Db활용가이드 (17)

SQL 튜닝에 Dictionary View 활용하기 Part2_Wh oracle
SQL 튜닝에 Dictionary View 활용하기 Part2_Wh oracleSQL 튜닝에 Dictionary View 활용하기 Part2_Wh oracle
SQL 튜닝에 Dictionary View 활용하기 Part2_Wh oracle
 
실무로 배우는 시스템 성능 최적화 Ch6
실무로 배우는 시스템 성능 최적화 Ch6실무로 배우는 시스템 성능 최적화 Ch6
실무로 배우는 시스템 성능 최적화 Ch6
 
[2015-06-26] Oracle 성능 최적화 및 품질 고도화 3
[2015-06-26] Oracle 성능 최적화 및 품질 고도화 3[2015-06-26] Oracle 성능 최적화 및 품질 고도화 3
[2015-06-26] Oracle 성능 최적화 및 품질 고도화 3
 
(SQL힌트튜닝,온라인화상교육#3회차,강의자료,12/22)중첩루프조인개요,USE_NL, ORDERED, USE_NL_WITH_INDEX_오...
(SQL힌트튜닝,온라인화상교육#3회차,강의자료,12/22)중첩루프조인개요,USE_NL, ORDERED, USE_NL_WITH_INDEX_오...(SQL힌트튜닝,온라인화상교육#3회차,강의자료,12/22)중첩루프조인개요,USE_NL, ORDERED, USE_NL_WITH_INDEX_오...
(SQL힌트튜닝,온라인화상교육#3회차,강의자료,12/22)중첩루프조인개요,USE_NL, ORDERED, USE_NL_WITH_INDEX_오...
 
[오픈소스컨설팅]Day #3 MySQL Monitoring, Trouble Shooting
[오픈소스컨설팅]Day #3 MySQL Monitoring, Trouble Shooting[오픈소스컨설팅]Day #3 MySQL Monitoring, Trouble Shooting
[오픈소스컨설팅]Day #3 MySQL Monitoring, Trouble Shooting
 
Database 튜닝 교육 110124
Database 튜닝 교육 110124Database 튜닝 교육 110124
Database 튜닝 교육 110124
 
파이썬 sqlite 이해하기
파이썬 sqlite 이해하기파이썬 sqlite 이해하기
파이썬 sqlite 이해하기
 
집합함수(1)
집합함수(1)집합함수(1)
집합함수(1)
 
#25.SQL초보에서 Schema Objects까지_구로IT학원/국비지원IT학원추천/구로디지털단지IT학원/재직자환급교육추천
#25.SQL초보에서 Schema Objects까지_구로IT학원/국비지원IT학원추천/구로디지털단지IT학원/재직자환급교육추천#25.SQL초보에서 Schema Objects까지_구로IT학원/국비지원IT학원추천/구로디지털단지IT학원/재직자환급교육추천
#25.SQL초보에서 Schema Objects까지_구로IT학원/국비지원IT학원추천/구로디지털단지IT학원/재직자환급교육추천
 
3.5 실행계획 SQL 연산 (HASH SEMI-JOIN)
3.5 실행계획 SQL 연산 (HASH SEMI-JOIN)3.5 실행계획 SQL 연산 (HASH SEMI-JOIN)
3.5 실행계획 SQL 연산 (HASH SEMI-JOIN)
 
제6장 테이블 조인
제6장 테이블 조인제6장 테이블 조인
제6장 테이블 조인
 
3.6 실행계획 SQL 연산 (NESTED LOOP SEMI-JOIN)
3.6 실행계획 SQL 연산 (NESTED LOOP SEMI-JOIN)3.6 실행계획 SQL 연산 (NESTED LOOP SEMI-JOIN)
3.6 실행계획 SQL 연산 (NESTED LOOP SEMI-JOIN)
 
3.7 실행계획 SQL 연산 (INDEX RANGE SCAN DESCENDING, INLIST ITERATIOR)
3.7 실행계획 SQL 연산 (INDEX RANGE SCAN DESCENDING, INLIST ITERATIOR)3.7 실행계획 SQL 연산 (INDEX RANGE SCAN DESCENDING, INLIST ITERATIOR)
3.7 실행계획 SQL 연산 (INDEX RANGE SCAN DESCENDING, INLIST ITERATIOR)
 
3.3 실행계획 SQL 연산 (Count,Count Stopkey/Filter)
3.3 실행계획 SQL 연산 (Count,Count Stopkey/Filter)3.3 실행계획 SQL 연산 (Count,Count Stopkey/Filter)
3.3 실행계획 SQL 연산 (Count,Count Stopkey/Filter)
 
제5장 집계함수, 그룹함수 사용하기
제5장 집계함수, 그룹함수 사용하기제5장 집계함수, 그룹함수 사용하기
제5장 집계함수, 그룹함수 사용하기
 
3.4 실행계획 SQL 연산 (Hash Anti-Join)
3.4 실행계획 SQL 연산 (Hash Anti-Join)3.4 실행계획 SQL 연산 (Hash Anti-Join)
3.4 실행계획 SQL 연산 (Hash Anti-Join)
 
PL/SQL - 10g Release1
PL/SQL - 10g Release1PL/SQL - 10g Release1
PL/SQL - 10g Release1
 

Db활용가이드

  • 1. DB활용가이드 2012. 10 DB PART - ARKIZ
  • 2. SCHEDULE 1. SQL GUIDE ① SQL작성시 유의사항 – SQL 활용가이드 참고 ② JOIN ③ SUBQUERY ④ Optmizer의 이해 ⑤ EXPLAIN 2. Query Tuning ① Clustring Index, Covering Index ② UNION, UNION ALL ③ ANY, EXISTS 3. Data Modeling ① 엔터티, 속성, 식별자, 관계 4. Logical Modeling ① 작도방법, 보는 방법 5. Physical Modeling ① 규칙 및 유의사항
  • 3. STRUCTURED QUERY LANGUAGE, 구조화 질의어 Standard?  SQL-86 First published by ANSI. Ratified by ISO in 1987  SQL-89 Minor revision  SQL-92 or SQL2 - Major revision (ISO 9075) - MySQL start  SQL:1999 or SQL3  SQL:2003  SQL:2006  SQL:2008  SQL:2011 ISO/IEC 9075-1:2011 CHE 172 http://en.wikipedia.org/wiki/SQL
  • 4. BEFORE WRITE QUERY… 어떻게 처리할 것인지를 먼저 생각하지 말고 무엇을 할 것인지를 먼저 파악하라. 그러한 결과 값을 얻기 위해 어떤 집합 이 필요한지를 찾아라. 필요한 집합이 논리적 으로 가능한지를 확인한다. 그러나 그 집합을 구체적으로 어떻게 생성할 것인지는 아직 생각하지 마라. 구체적인 생성 방법은 나중에 해도 충분하다. 원하는 집합이 생성 가능하다면 그 전체 집합을 마치 하나의 테이블로 간주 하라. 다시 말하면 원하는 집합을 테이 블에 넣었다고 생각하라. 그러면 지금부터는 하나의 테이블에 있는 정보를 가공 처리하는 단순한 형태가 된다. 추출되어야 할 결과 집합의 로우 단위 를 명확히 해라. 즉, 어떤 단위로 중분류를 해야 하는가(G roup by ) 를 결 정하라. 한 레코드씩 추출될 추출 단위( 중분류) 별로 내부에 속한 실제 로우들의 가공 처리 방법을 결정한다. 각각의 레코드마다 여 러 개의 실제 로우가 모여서 한 레코드가 되는 것이므로 여러 개의 실제 로우를 경우에 따라 어떤 방법으로 가공시키라는 것은 곧 SUM( x x x x ) 문 에 서 'x x x x '로 표시된 부분에 각 로우마다 해당되는 경우의 수를 처리 하는 것이다. 추출한 항목이 완성되었으 면 남겨 두었던 전체 집합을 구할 방법을 구체적으로 생각한다. 조인 이나 UNION 등을 활용하되 액세스 경로의 양호한 정도를 감안 한다. SQ L을 수행시켜 가면서 약간의 보정을 통해 결론에 도달한다. 이때 수행 속도 에 대한 대비책도 같이 테스트 해야 한 다. - 대용량 데이터베이스 솔루션 Ⅱ의 1장 89페이지 중에서
  • 5. JOIN MySQL JOIN Syntax manual comment… table_references: table_reference [, table_reference] ... • table_factor 구문은 SQL 표준에 비해 확장 되었다. table_reference: table_factor | join_table • MySQL에서, CROSS JOIN 은 INNER JOIN과 동등하다. 표준 SQL에서 table_factor: 는 그렇지 않다. INNER JOIN은 ON 절과 함께 쓰이며 CROSS JOIN은 tbl_name [[AS] alias] [index_hint_list] 그렇지 않다. | table_subquery [AS] alias | ( table_references ) • STRAIGHT_JOIN 은 왼쪽 테이블이 오른쪽 테이블보다 항상 먼저 읽힌 | { OJ table_reference LEFT OUTER JOIN table_reference 다는 점을 제외하면 JOIN과 동일하다. JOIN optimizer가 테이블을 잘못 ON conditional_expr } 된 순서로 놓을 경우에 사용될 수 있다. join_table: MySQL 5.0.12에서 변경된 JOIN연산 table_reference [INNER | CROSS] JOIN table_factor [join_condition] | table_reference STRAIGHT_JOIN table_factor • NATURAL 이나 USING join의 컬럼들은 이전 버전과 다를 수 있다. | table_reference STRAIGHT_JOIN table_factor ON conditional_expr • SQL:2003표준과 비교하여 MySQL에서의 확장은 MySQL이 NATURAL | table_reference {LEFT|RIGHT} [OUTER] JOIN table_reference join_condition 이나USING join의 common 컬럼 들을 조절 할수 있게 하였는데 이는 표 | table_reference NATURAL [{LEFT|RIGHT} [OUTER]] JOIN table_factor 준 SQL문에서는 허용되지 않는다. join_condition: ON conditional_expr | USING (column_list) + arkiz comment… index_hint_list: • MySQL은 기본적으로 Nested Join을 수행한다. index_hint [, index_hint] ... • FROM절의 테이블중 index가 없는 테이블이 구동테이블 • 둘 다 인덱스가 있는 경우 가장 왼쪽부터(표준은 오른쪽부터) index_hint: USE {INDEX|KEY} • Table Driving은 FROM절 가장 왼쪽 테이블부터 구동된다. [FOR {JOIN|ORDER BY|GROUP BY}] ([index_list]) | IGNORE {INDEX|KEY} • STRAIGHT_JOIN, index hint 는 가급적 사용하지 않도록 하며, 필요 시 [FOR {JOIN|ORDER BY|GROUP BY}] (index_list) DB파트와 상의하여 사용한다. | FORCE {INDEX|KEY} [FOR {JOIN|ORDER BY|GROUP BY}] (index_list) • 외부조인시 LEFT, RIGHT JOIN 절 뒤에 오는 table 의 해당하는 컬럼이 WHERE절에서 언급되면 외부조인은 내부조인문으로 변경 될 수 있다. index_list: index_name [, index_name] ...
  • 6. SUBQUERY subquery sample Scalar subquery - SELECT List절에 한 개 column 값만을 반환 SELECT (SELECT Inline view column2 Scalar subquery FROM table - FROM 절에 레코드 리스트를 반환 WHERE column1 = a.column1) FROM (SELECT columns Inline view Subquery FROM table) AS a - SELECT statement에 포함하는 또 다른 SELECT WHERE column1 > (SELECT value FROM table subquery statement WHERE column2 = 1) AND column2 > (SELECT value FROM table Correlated subquery Correlated subquery WHERE column2 = a.column1) - FROM 절에 레코드 리스트를 반환 * 적용 기준(권장사항) 1. Select List Scalar Subquery를 수행할 결과집합이 대량이 아닌 경우 2. 코드성 테이블의 조인이 많아 실행계획이 복잡해져 제어가 어려운 경우 3. 코드성 테이블에서 명칭만 가져오는 경우 (단, 코드에서 명칭만 가져오더라도 결과 집합이 대량이면 스칼라 서브쿼리가 불리할 수 있으므로 대량인 경우 조인을 사용할 것) 4. 한 개의 테이블에서 복수 개의 컬럼을 가져오는 경우 스칼라 서브쿼리(두개의 컬럼을 ||로 묶어서 한 개의 컬럼을 리턴)를 사용 하지 말고 조인을 사용하도록 함