Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Database Relational Model SPARCS’11 undead What is Database? • Data • 정보를 작성하기 위해 필요한 자료 • Database • 논리적으로 연관된 하나 이상의 자료의 모음 • 데이터를 잘 정리해두고, 필요할 때 정리된 정보를 취득하기 위함 • DMBS (Database Management System) • • • • 데이터를 효과적으로 이용할 수 있도록 정리/보관하기 위한 소프트웨어 데이터의 추가, 변경, 삭제, 검색 등의 기능을 집대성한 소프트웨어 패키지 MySQL, PostgreSQL, SQLite, Microsoft SQL Server, Microsoft Access, Oracle 등 다수의 사용자 또는 프로그램의 요구를 처리하고 적절히 응답하여 데이터를 사용할 수 있게 해주는 역할 2013-04-09 SPARCS'11 undead 2 DMBS Functions • Definition (정의) • 데이터에 대한 형식, 구조, 제약조건들을 명세하는 기능 • Construction (구축) • DBMS가 관리하는 기억장치에 데이터를 저장하는 기능 • Manipulation (조작) • 특정한 데이터를 검색하기 위한 쿼리, 데이터베이스의 갱신, 보고서 생성 기능 등 • Sharing (공유) • 여러 사용자와 프로그램이 데이터베이스에 동시에 접근하도록 하는 기능 • Protection (보호) • 하드웨어나 소프트웨어의 오동작 또는 권한이 없는 악의적인 접근으로부터 시스템을 보호 • Maintenance (유지보수) • 시간이 지남에 따라 변화하는 요구사항을 반영할 수 있도록 하는 기능 2013-04-09 SPARCS'11 undead 3 Database Models • • • • • • • • • Hierarchical database model Network model Relational model Entity-relationship model Enhanced entity-relationship model Object model Document model Entity-attribute-value model Star schema a 2013-04-09 SPARCS'11 undead 4 Database Models • • • • • • • • • Hierarchical database model Network model Relational model Entity-relationship model Enhanced entity-relationship model Object model Document model Entity-attribute-value model Star schema 다 필요 없고 일단 Relational model부터 공부합시다 2013-04-09 SPARCS'11 undead 5 Relational Model • Entity • 실체 • 실세계에서 개별적으로 인식될 수 있는 것 • 데이터베이스에 저장되는 데이터의 대상 • Attribute • 어떤 entity에 대해서 관심을 가질만한 가치가 있는 속성 • Relation • 둘 이상의 entity들 간의 관계 2013-04-09 SPARCS'11 undead 6 Relational Model 2013-04-09 SPARCS'11 undead 7 Relational Model 한 번 설계해 봅시다. 2013-04-09 SPARCS'11 undead 8 Designing KAIST Student DB Student 2013-04-09 SPARCS'11 undead 9 Designing KAIST Student DB • 이름 • 학번 • 학과 • 출신고교 • 생년월일 2013-04-09 Student SPARCS'11 undead 10 Designing KAIST Student DB 이름 학번 학과 출신고교 생년월일 샤바칸 20111064 전산학과 해외고 921112 찰제 20110846 전산학과 일반고 931125 만렙물개 20110054 산업디자인학과 일반고 920620 커피 20120308 전산학과 KSA 940206 채종욱 20120522 전산학과 KSA 940411 마재의 20120123 전산학과 한성과고 930503 짭덕 20100135 전기 및 전자공학과 서울과고 920626 호떡 20100982 전산학과 서울과고 920926 2013-04-09 SPARCS'11 undead 11 Desgning KAIST Student DB • Key • • • • 어떤 entity를 고유하게 만들어주는 attribute(s) 하나의 필드가 될 수도 있고, 여러 필드의 조합일 수도 있습니다. null이 될 수 없는 필드여야 함 Unique해야 함 • Key attribute 2013-04-09 SPARCS'11 undead 12 Designing KAIST Student DB 이름 학번 학과 출신고교 생년월일 샤바칸 20111064 전산학과 해외고 921112 찰제 20110846 전산학과 일반고 931125 만렙물개 20110054 산업디자인학과 일반고 920620 커피 20120308 전산학과 KSA 940206 채종욱 20120522 전산학과 KSA 940411 마재의 20120123 전산학과 한성과고 930503 짭덕 20100135 전기 및 전자공학과 서울과고 920626 호떡 20100982 전산학과 서울과고 920926 2013-04-09 • Key가 될 수 있는 필드는? SPARCS'11 undead 13 Designing KAIST Student DB 이름 학번 학과 출신고교 생년월일 샤바칸 20111064 전산학과 해외고 921112 찰제 20110846 전산학과 일반고 931125 만렙물개 20110054 산업디자인학과 일반고 920620 커피 20120308 전산학과 KSA 940206 채종욱 20120522 전산학과 KSA 940411 마재의 20120123 전산학과 한성과고 930503 짭덕 20100135 전기 및 전자공학과 서울과고 920626 호떡 20100982 전산학과 서울과고 920926 2013-04-09 • Key가 될 수 있는 필드는? SPARCS'11 undead 14 Designing KAIST Student DB 이름 학번 학과 출신고교 생년월일 샤바칸 20111064 전산학과 해외고 921112 찰제 20110846 전산학과 일반고 931125 만렙물개 20110054 산업디자인학과 일반고 920620 커피 20120308 전산학과 KSA 940206 채종욱 20120522 전산학과 KSA 940411 마재의 20120123 전산학과 한성과고 930503 짭덕 20100135 전기 및 전자공학과 서울과고 920626 호떡 20100982 전산학과 서울과고 920926 2013-04-09 • Key가 될 수 있는 필드는? SPARCS'11 undead 15 Designing KAIST Student DB Department 2013-04-09 SPARCS'11 undead 16 Designing KAIST Student DB • 학과 이름 • 학과 코드 • 창립 년도 • 홈페이지 Department 2013-04-09 SPARCS'11 undead 17 Designing KAIST Student DB 학과 이름 학과 코드 창립년도 홈페이지 전산학과 cs 1972 cs. 산업디자인학과 id 1986 id. 전기 및 전자공학과 ee 1973 ee. 수리과학과 mas 1972 mathsci. 경영과학과 msb 2009 ms. 2013-04-09 SPARCS'11 undead 18 Designing KAIST Student DB Department Student 학과 이름 학과 코드 창립년도 홈페이지 이름 학번 학과 출신고교 생년월일 전산학과 cs 1972 cs. 샤바칸 20111064 전산학과 해외고 921112 산업디자인학과 id 1986 id. 찰제 20110846 전산학과 일반고 931125 전기 및 전자공학과 ee 1973 ee. 만렙물개 20110054 산업디자인학과 일반고 920620 수리과학과 mas 1972 mathsci. 커피 20120308 전산학과 KSA 940206 경영과학과 msb 2009 ms. 채종욱 20120522 전산학과 KSA 940411 마재의 20120123 전산학과 한성과고 930503 짭덕 20100135 전기 및 전자공학과 서울과고 920626 호떡 20100982 전산학과 서울과고 920926 그렇다면 이 둘의 관계는? - 학생은 학과에 소속되어 있다 - 2013-04-09 SPARCS'11 undead 19 Departme nt include Studen t 샤바칸 cs 찰제 … 만렙물개 id … … 2013-04-09 SPARCS'11 undead 20 include Department Department 1..n 1 Department 2013-04-09 Student Student Student SPARCS'11 undead 21 Designing KAIST Student DB Department Student 학과 이름 학과 코드 창립년도 홈페이지 이름 학번 학과 출신고교 생년월일 전산학과 cs 1972 cs. 샤바칸 20111064 cs 해외고 921112 산업디자인학과 id 1986 id. 찰제 20110846 cs 일반고 931125 전기 및 전자공학과 ee 1973 ee. 만렙물개 20110054 id 일반고 920620 수리과학과 mas 1972 mathsci. 커피 20120308 cs KSA 940206 경영과학과 msb 2009 ms. 채종욱 20120522 cs KSA 940411 무학과 ??? ??? ??? 마재의 20120123 cs 한성과고 930503 짭덕 20100135 ee 서울과고 920626 호떡 20100982 cs 서울과고 920926 김영석 20121023 무학과 해외고 0531 2013-04-09 SPARCS'11 undead 22 Designing KAIST Student DB Department Student 학과 이름 학과 코드 창립년도 홈페이지 이름 학번 학과 출신고교 생년월일 전산학과 cs 1972 cs. 샤바칸 20111064 cs 해외고 921112 산업디자인학과 id 1986 id. 찰제 20110846 cs 일반고 931125 전기 및 전자공학과 ee 1973 ee. 만렙물개 20110054 id 일반고 920620 수리과학과 mas 1972 mathsci. 커피 20120308 cs KSA 940206 경영과학과 msb 2009 ms. 채종욱 20120522 cs KSA 940411 마재의 20120123 cs 한성과고 930503 짭덕 20100135 ee 서울과고 920626 호떡 20100982 cs 서울과고 920926 김영석 20121023 null 해외고 930531 삭ㅋ제ㅋ 2013-04-09 SPARCS'11 undead 23 Department include 1 2013-04-09 Student 1..n SPARCS'11 undead 24 Department include 0..1 2013-04-09 Student 1..n SPARCS'11 undead 25 include Department Department 1..n 0..1 Department 2013-04-09 Student Student Student SPARCS'11 undead 26 Departme nt include Studen t 샤바칸 cs 찰제 … 만렙물개 id … … ms b 2013-04-09 김영석 SPARCS'11 undead 27 Department include 0..1 2013-04-09 Student 1..n SPARCS'11 undead 28 Department include 0..n 2013-04-09 Student 1..n SPARCS'11 undead 29 include Department Department 1..n 0..n Department 2013-04-09 Student Student Student SPARCS'11 undead 30 Designing KAIST Student DB Department Student 학과 이름 학과 코드 창립년도 홈페이지 이름 학번 학과 출신고교 생년월일 전산학과 cs 1972 cs. 샤바칸 cs 해외고 921112 산업디자인학과 id 1986 id. 2011106 4 전기 및 전자공학과 ee 1973 ee. 찰제 cs 일반고 931125 수리과학과 mas 1972 mathsci. 2011084 6 경영과학과 msb 2009 ms. 만렙물개 2011005 4 id 일반고 920620 커피 2012030 8 cs KSA 940206 채종욱 2012052 2 cs KSA 940411 마재의 2012012 3 cs 한성과고 930503 짭덕 2010013 5 ee 서울과고 920626 호떡 2010098 2 cs 서울과고 920926 김영석 2012102 3 null 해외고 930531 2013-04-09 SPARCS'11 undead 31 Designing KAIST Student DB Department Student 학과 이름 학과 코드 창립년도 홈페이지 이름 학번 학과 복수전공 출신고교 생년월일 전산학과 cs 1972 cs. 샤바칸 cs msb 해외고 921112 산업디자인학과 id 1986 id. 2011106 4 전기 및 전자공학과 ee 1973 ee. 찰제 cs null 일반고 931125 수리과학과 mas 1972 mathsci. 2011084 6 경영과학과 msb 2009 ms. 만렙물개 2011005 4 id null 일반고 920620 커피 2012030 8 cs null KSA 940206 채종욱 2012052 2 cs null KSA 940411 마재의 2012012 3 cs null 한성과고 930503 짭덕 2010013 5 ee null 서울과고 920626 호떡 2010098 2 cs mas 서울과고 920926 김영석 2012102 3 null null 해외고 930531 2013-04-09 SPARCS'11 undead 32 Designing KAIST Student DB Student 이름 학과 복수전공 1 복수전공 2 부전공 샤바칸 cs msb null (경제) 찰제 cs null null null 만렙물개 id null null null 짭덕 ee null null null 호떡 cs mas null null 김영석 null null null null 안재만 cs mas ee null 조형 id msb null cs 2013-04-09 SPARCS'11 undead 33 Designing KAIST Student DB Student 이름 학과 복수전공 1 복수전공 2 부전공 샤바칸 cs msb null (경제) 찰제 cs null null null 만렙물개 id null null null 짭덕 ee null null null 호떡 cs mas null null 김영석 null null null null 안재만 cs mas ee null 조형 id msb null cs Scenario: 어떤 신입생이 들어옵니다. 이 사람은 오로지 DB에 트롤링을 하려는 목적으로 카이스트의 모든 학부 프로그램을 복수전공과 부전공을 적절히 섞어서 신청합니다. 2013-04-09 SPARCS'11 undead 34 Designing KAIST Student DB Student 이름 학과 복수전공 1 복수전공 2 복수전공 3 복수전공 4 복수전공 5 복수전공 6 복수전공 7 부전공 1 부전공 2 부전공 3 부전공 4 샤바칸 cs msb null null null null null null (경제) null null null 찰제 cs null null null null null null null null null null null 만렙물개 id null null null null null null null null null null null 짭덕 ee null null null null null null null null null null null 호떡 cs mas null null null null null null null null null null 김영석 null null null null null null null null null null null null 안재만 cs mas ee null null null null null null null null null 조형 id msb null null null null null null cs null null null 헤르메온느 cs id mas bs bis nqe ie ch msb (경제) stp me 어엌ㅋㅋㅋㅋㅋ 닝겐노 모래시계와 강려크데스네 2013-04-09 SPARCS'11 undead 35 Department DepartmentStudent Student 이름 학과이름 학과코 드 창립년 도 홈페이 지 바이오및뇌공학 과 bis 2001 bioeng. 생명과학과 bs 1972 bs. 김영석 전산학과 cs 1972 cs. 안재만 수리과학과 mas 1972 mathsci. 조형 2013-04-09 샤바칸 찰제 만렙물개 SPARCS'11 undead 36 Department DepartmentStudent Student 학과코드 이름 이름 cs 샤바칸 샤바칸 cs 찰제 찰제 id 만렙물개 만렙물개 학과이름 학과코 드 창립년 도 홈페이 지 바이오및뇌공학 과 bis 2001 bioeng. 생명과학과 bs 1972 bs. cs 안재만 김영석 전산학과 cs 1972 cs. id 조형 안재만 수리과학과 mas 1972 mathsci. 2013-04-09 조형 SPARCS'11 undead 37 Department DepartmentStudent Student 학과코드 이름 이름 cs 샤바칸 샤바칸 cs 찰제 찰제 id 만렙물개 만렙물개 학과이름 학과코 드 창립년 도 홈페이 지 바이오및뇌공학 과 bis 2001 bioeng. 생명과학과 bs 1972 bs. cs 안재만 김영석 전산학과 cs 1972 cs. id 조형 안재만 수리과학과 mas 1972 mathsci. msb 샤바칸 조형 ee 안재만 mas 안재만 msb 조형 cs 조형 2013-04-09 SPARCS'11 undead 38 ERD 2013-04-09 SPARCS'11 undead 39 Entity Relation Diagram 2013-04-09 SPARCS'11 undead 40 dep_name foundation homepage dep__id Department 2013-04-09 include SPARCS'11 undead std_name std_number Student 41 schema 2013-04-09 SPARCS'11 undead 42 Department include Student dep_id char(3), not null std_id integer, not null dep_id char(3), primary key, unique std_id integer, primary key, unique dep_nam e varchar(20), unique, not null std_name varchar(20), unique, not null foundatio n integer, not null 2013-04-09hompage varchar(20) SPARCS'11 undead 43 Department include Student dep_id char(3), not null std_id integer, not null dep_id char(3), primary key, unique std_id integer, primary key, unique dep_nam e varchar(20), unique, not null std_name varchar(20), unique, not null foundatio n integer, not null 2013-04-09hompage varchar(20) SPARCS'11 undead 44 Department include Student dep_id char(3), not null std_id integer, not null dep_id char(3), primary key, unique std_id integer, primary key, unique dep_nam e varchar(20), unique, not null std_name varchar(20), unique, not null foundatio n integer, not null 2013-04-09hompage varchar(20) SPARCS'11 undead 45 Department include Student dep_id char(3), not null std_id integer, not null dep_id char(3), primary key, unique std_id integer, primary key, unique dep_nam e varchar(20), unique, not null std_name varchar(20), not null foundatio n integer, not null 2013-04-09hompage varchar(20) SPARCS'11 undead 46 MySQL • Structured query language / 구조화 질의어 • 특정한 DB 시스템에 한정되지 않아 널리 사용됨 • Functions • Query • Data definition • Manipulation 2013-04-09 SPARCS'11 undead 47 $mysql [–h host] [–u user] [–p[password]] [dbname] $mysql -u zzongaly -p Enter password: ******** Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 14 to server version: 3.23.34a Type 'help;' or '\h' for help. Type '\c' to clear the buffer mysql> 2013-04-09 SPARCS'11 undead 48 >mysql [–h host] [–u user] [–p[password]] [dbname] >mysql -u zzongaly –ppassword Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 14 to server version: 3.23.34a Type 'help;' or '\h' for help. Type '\c' to clear the buffer mysql> 2013-04-09 SPARCS'11 undead 49 mysql> show databases; mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | +--------------------+ 2 rows in set (0.00 sec) 2013-04-09 SPARCS'11 undead 50 mysql> show databases; mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | +--------------------+ 2 rows in set (0.00 sec) 2013-04-09 SPARCS'11 undead 51 mysql> create database [dbname]; mysql> create database zzongaly -> ; Query OK, 1 row affected (0.04 sec) 2013-04-09 SPARCS'11 undead 52 mysql> use [dbname]; mysql> use zzongaly Database changed 2013-04-09 SPARCS'11 undead 53 mysql> show tables; mysql> show tables; Empty set (0.00 sec) 2013-04-09 SPARCS'11 undead 54 Department include Student dep_id char(3), not null std_id integer, not null dep_id char(3), primary key, unique std_id integer, primary key, unique dep_nam e varchar(20), unique, not null std_name varchar(20), not null foundatio n integer, not null 2013-04-09hompage varchar(20) SPARCS'11 undead 55 Student 2013-04-09 SPARCS'11 undead std_id integer, primary key, unique std_name varchar(20), not null 56 mysql> CREATE TABLE tablename( fieldname fieldtype [NOT NULL], [fieldname fieldtype [NOT NULL],] UNIQUE(fieldname[, fieldname]), PRIMARY KEY(fieldname[, fieldname]) ); 2013-04-09 SPARCS'11 undead 57 std_id integer, primary key, unique std_name varchar(20), not null mysql> CREATE TABLE tablename( fieldname fieldtype [NOT NULL], [fieldname fieldtype [NOT NULL],] UNIQUE(fieldname[, fieldname]), PRIMARY KEY(fieldname[, fieldname]) ); mysql> -> -> -> -> 2013-04-09 CREATE TABLE Student( std_id INTEGER, std_name VARCHAR(20) NOT NULL, PRIMARY KEY(std_id) ); SPARCS'11 undead 58 std_id integer, primary key, unique std_name varchar(20), not null mysql> CREATE TABLE tablename( fieldname fieldtype [NOT NULL], [fieldname fieldtype [NOT NULL],] UNIQUE(fieldname[, fieldname]), PRIMARY KEY(fieldname[, fieldname]) ); mysql> -> -> -> -> -> 2013-04-09 CREATE TABLE Student( std_id INTEGER, std_name VARCHAR(20) NOT NULL, PRIMARY KEY(std_id), CHECK (std_id >= 19000000 AND std_id< 30000000) ); SPARCS'11 undead 59 std_id integer, primary key, unique std_name varchar(20), not null mysql> INSERT INTO tablename VALUES(value [,value]); mysql> INSERT INTO Student VALUES(20070764, ’정진근’); 2013-04-09 SPARCS'11 undead 60 std_id integer, primary key, unique std_name varchar(20), not null mysql> INSERT INTO tablename (fieldname [, fieldname]) VALUES (value [,value]); mysql> INSERT INTO Student(std_id, std_name) -> VALUES(20070764, ’정진근’); 2013-04-09 SPARCS'11 undead 61 std_id integer, primary key, unique std_name varchar(20), not null mysql> SELECT * FROM tablename; mysql> SELECT * FROM Student; 2013-04-09 SPARCS'11 undead 62 std_id integer, primary key, unique std_name varchar(20), not null mysql> SELECT fieldname FROM tablename; mysql> SELECT std_id FROM Student; 2013-04-09 SPARCS'11 undead 63 std_id integer, primary key, unique std_name varchar(20), not null mysql> SELECT * FROM tablename WHERE condition; mysql> SELECT * FROM Student WHERE std_id > 20110000; 2013-04-09 SPARCS'11 undead 64 std_id integer, primary key, unique std_name varchar(20), not null mysql> DELETE FROM tablename WHERE condition; mysql> SELECT FROM Student WHERE std_id = 20110125; 2013-04-09 SPARCS'11 undead 65 Department include Student dep_id char(3), not null std_id integer, not null dep_id char(3), primary key, unique std_id integer, primary key, unique dep_nam e varchar(20), unique, not null std_name varchar(20), not null foundatio n integer, not null 2013-04-09hompage varchar(20) SPARCS'11 undead 66 include 2013-04-09 dep_id char(3), not null std_id integer, not null SPARCS'11 undead 67 dep_id char(3), not null std_id integer, not null mysql> CREATE TABLE tablename( fieldname fieldtype [NOT NULL], [fieldname fieldtype [NOT NULL],] UNIQUE(fieldname[, fieldname]), PRIMARY KEY(fieldname[, fieldname]) ); mysql> -> -> -> -> 2013-04-09 CREATE TABLE Dep_Stu( dep_id char(3) NOT NULL, std_id INTEGER NOT NULL, PRIMARY KEY( ); SPARCS'11 undead ) 68 dep_id char(3), not null std_id integer, not null mysql> CREATE TABLE tablename( fieldname fieldtype [NOT NULL], [fieldname fieldtype [NOT NULL],] UNIQUE(fieldname[, fieldname]), PRIMARY KEY(fieldname[, fieldname]) ); mysql> -> -> -> -> 2013-04-09 CREATE TABLE Dep_Stu( dep_id char(3) NOT NULL, std_id INTEGER NOT NULL, PRIMARY KEY(dep_id, std_id) ); SPARCS'11 undead 69 dep_id char(3), not null std_id integer, not null mysql> CREATE TABLE tablename( fieldname fieldtype [NOT NULL], [fieldname fieldtype [NOT NULL],] UNIQUE(fieldname[, fieldname]), PRIMARY KEY(fieldname[, fieldname]) ); mysql> -> -> -> -> -> -> 2013-04-09 CREATE TABLE Dep_Stu( dep_id char(3) NOT NULL, std_id INTEGER NOT NULL, PRIMARY KEY(dep_id, std_id), FOREIGN KEY(dep_id) REFERENCES Department, FOREIGN KEY(std_id) REFERENCES Student ); SPARCS'11 undead 70 Help • 궁금하면 엔간하면 Google신께 기도를 올리면 됩니다. 2013-04-09 SPARCS'11 undead 71 Database Tuning 2013-04-09 SPARCS'11 undead 72 Database Tuning Golden rule: Good database performance starts with good database design. No amount of fine tuning will make a poorly designed database perform as well as a well-designed database. 2013-04-09 SPARCS'11 undead 73 Database Design • Conceptual design – DBMS independent • Database analysis and requirements • Determine end-user views, outputs, and transaction-processing requirements • Entity relationship modeling and normalization • Define entities, attributes, and relationships. Draw DR diagrams. Normalize tables. • Data model verification • Identify main processes, insert, update, and delete rules • Logical design – DBMS dependent • Translate the conceptual model into definitions for tables, views, and so on. • Physical design – Hardware dependent • Define storage structures and access paths for optimum performance 2013-04-09 SPARCS'11 undead 74 Database Design • ACID test • Atomicity • 모든 작업들이 수행되었는지를 보장하는 능력 • Consistency • 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 유지하는 것 • Isolation • 작업을 수행할 때 다른 작업이 끼어들지 못하도록 보장하는 것 • Durability • 성공적으로 수행된 작업은 영원히 반영되어야 함 • Serializability • Multiuser 혹은 distributed database에서 중요시됨 • 여러 가지의 작업을 동시에 실행할 때 일관성 있는 결과를 내놓아야 함 2013-04-09 SPARCS'11 undead 75 Database Tuning 쿼리를 처리할 때 CPU, RAM, Secondary Storage, Network, 어플리케이션의 코드(라 쓰고 똥이라 읽습니다) 때문에 병목현상이 일어남! 2013-04-09 SPARCS'11 undead 76 Database Tuning 쿼리를 처리할 때 CPU, RAM, Secondary Storage, Network, 어플리케이션의 코드(라 쓰고 똥이라 읽습니다) 때문에 병목현상이 일어남! 두 가지 접근: • SQL performance tuning • 서버의 자원을 최대한 적게 사용하는 SQL 쿼리를 보내는 것 • DBMS performance tuning • 존재하는 자원을 최대한 효율적으로 사용하는 것 2013-04-09 SPARCS'11 undead 77 Database Tuning • Index를 사용한다 • • • • Create indexes for each single attribute used in a WHERE, HAVING, ORDER BY, GROUP BY Do not use indexes in small tables or tables with low sparsity Declare primary and foreign keys so the optimizer can use the indexes in join operations. Declare indexes in join columns other than PK or FK 2013-04-09 SPARCS'11 undead 78 Database Tuning • WHERE, HAVING 등 조건문 사용에 주의를 기한다. • Use simple columns or literals as operands in a conditional expression • Avoid the use of conditional expressions with functions whenever possible • Numeric field comparisons are faster than character, date, and NULL comparisons • Equality comparisons are faster than inequality comparisons • Whenever possible, transform conditional expressions to use literals • price – 10 = 7 price = 17 • P_QOH < P_MIN AND P_MIN = P_REORDER AND P_MIN > 10 P_QOH = 10 AND P_MIN = P_REORDER AND P_MIN > 10 • • • • When using multiple conditional expressions, write the equality conditions first If you use multiple AND conditions, write the condition most likely to be false first When using multiple OR conditions, put the condition most likely to be true first Whenever possible, try to avoid the use of the NOT logical operator • NOT (P_PRICE > 10.00) P_PRICE <= 10.00 • NOT(EMP_SEX = ‘M’) EMP_SEX = ‘F’ 2013-04-09 SPARCS'11 undead 79 Database Tuning • Query Formulation • Identify what columns and computations are required • Simple expressions? • Aggregate functions? (GROUP BY, subquery) • Identify the source tables • Determine how to join the tables • Determine what selection criteria is needed • • • • Simple comparison Single value to multiple values (IN) Nested comparisons ( PRICE >= ( SELECT AVG(PRICE) FROM PRODUCT ) Grouped data selection (HAVING) • Determine in what order to display the output (ORDER BY) 2013-04-09 SPARCS'11 undead 80 Database Tuning • DBMS performance tuning • • • • Data cache SQL cache Sort ache Optimizer mode (cost-based vs. rule-based) * cost-based optimizer: determine the best approach to execute a query * rule-based optimizer: uses preset rules and points to determine the best approach to execute a query 2013-04-09 SPARCS'11 undead 81