정보보안공부

DBMS_day12 본문

데이터베이스

DBMS_day12

Steady_sp 2017. 7. 26. 17:40

# 뷰어를 만들면 그 뷰어도 테이블 목록에 출력 된다. show tables로 만들어져 있는 뷰어와 테이블을 모두 확인할 수 있다.

 

# drop view uv_memberTBL; -> uv_memberTBL이라는 뷰어를 삭제한다.

 

# 왼쪽 목록에있는 VIEW마우스 우클릭 create view `memberTBL_view` as select memberID, memberAddress from memberTBL;

 

# employee 압출풀고

 

# workbench -> management -> data import -> self -> employees.sql -> new해서 이름 : employees

 

# 스키마창에서 새로고침
-> use employees;
-> show tables;

 

# 자료형
- char : 문자
- varchar : 문자

 

# char, varchar 모두 글자 수 제한을 할 수 있다.
예) char(5) 5글자로 저장할 수 있는 문자의 수를 제한
예) varchar(3) 3글자로 저장할 수 있는 문자의 수를 제한

 

# char 자료형으로 글자 제한을 5로 지정하면 2Byte X 5 = 10 Byte 만큼 컴퓨터에 디스크 공간이 할당된다.

 

# varchar 자료형은 글자 제한을 5로 지정하면 디스크 공간을 얼만큼 할당 될 지 확신할 수 없다.

 

# varchar 자료형은 저장하는 문자의 수에 따라 디스크 공간에 사이즈가 지정 된다.
-> 만약 3글자를 저장하면 7Byte를 할당하게 된다
-> 만약 4글자를 저장하면 8Byte를 할당하게 된다

 

# 글자당 2Byte를 차지하는 것은 char, varchar도 동일하다.

 

# varchar 자료형은 저장하는 글자 외에 1Byte만큼을 지금 이 공간에 얼만큼 문자가

저장 돼 있는 지를 기록하는 데 사용하게 된다.

 

# varchar 자료형은 글자 수를 1000글자로 제한하건 10000글자로 제한하건 무조건 저장하는 글자 수에 따라 디스크 공간 사이즈가 결정 된다.

 

# 정적 사이즈 : 디스크 사이즈가 유동적이지 않다. 디스크 사이즈가 한결같이 지정한 것으로 똑같이 할당

# 동적 사이즈 : 디스크 사이즈를 저장하는 글자 수에 따라 다르게 할당 된다.

 

# CHAR : 정적 사이즈

# VARCHAR : 동적 사이즈

 

# CHAR
- 장점 : 성능이 저하 되지 않는다.
- 단점 : 디스크 용량이 낭비될 수 있다. 실제로 정해놓은 크기만큼 저장하지 않아도 일정 공간을 무조건 사용하기 때문에

 

# VARCHAR
- 장점 : 저장한 글자 수에 따라 사이즈가 지정 되기 때문에 디스크 용량이 낭비되지 않는다.
- 단점 : 저장하는 성능이 저하되게 된다. 글자 수가 몇 글자인지를 파악해야하므로

 

# 저장할 문자의 글자 수가 입력될 때 마다 많은 차이를 가지고 오지 않는 다면 CHAR를 선택하는 게 올바른 선택 이다.
예) 회원정보에 이름, 주민번호, 생년월일, 성별

 

# 저장할 문자의 글자 수가 입력될 때 마다 많은 차이를 가지고 온다면 VARCHAR를

선택하는 게 올바른 선택이다.
예) 게시판에 작성 된 게시글의 내용, 카카오톡에서 사용자들이 대화한 내용

 

# 자료형 중에 date 자료형은 날짜를 저장할 수 있는 자료형이다.

==========================================
use employees;

 

show tables;

 

create table shopDB.indexTBL(
 first_name varchar(14),

 last_name varchar(16),

 hire_date date

);

 

select * from shopDB.indexTBL;
==========================================

 

# insert 쿼리는 테이블에 데이터를 삽입할 때 사용하는 쿼리이다.

==========================================
insert into shopDB.indexTBL

select first_name, last_name, hire_date

from employees.employees;

===========================================
-> employees 데이터베이스에 있는 employees라는 테이블에 있는 컬럼 중에 first_name, last_name, hire_date라는 컬럼에 값을 indexTBL로 복사시켜라

# winSCP 프로그램은 scp 클라이언트 프로그램이다.
-> 원격장비 파일전송 프로그램

# scp라는 서비스는 ssh를 통해서 파일을 전송하는 서비스이다.

=================================================

# 네이버에 winSCP 검색후 다운
-> open getting 체크 하지않기
-> DBMS1 더블클릭 username : root
-> employees폴더 전체를 /root로 드래그
-> PuTTY 에서 DBMS1에서 ls
-> cd employees/
-> ls로 확인
-> create 스키마
-> Name : employees
-> 다시 PuTTY로 가서 mysql -u root -p employees < employees.sql
( employees.sql 이라는 파일에 데이터를 employees 라는 데이터베이스로 import작업 )
-> 다시 workbench로 이동
=================================================

-> use employees;
-> show tables;
-> select * from employees;  -> 데이터 보이는 것 ( 회사의 사원정보 ) 확인
-> 1000row(s) returned : 1000행을 가져왔다 ( 1000행 이상일수도 )
-> SQL창에 Limit to 1000rows는 select했을때 1000줄로 제한
-> Don`t Limit으로 설정하면 300024row(s), 그옆에 0.312sec 는 얼마나 걸리는지 시간을 측정한다.

 

# workbench에서 select 쿼리로 결과가 기본적으로는 최대 1000행으로 제한되어 있다. 제한을 원하는 만큼으로 조절할 수 있다. 제한을 없앨 수도 있다.

 

# workbench에 유용한 기능으로 쿼리가 응답되는데 까지 얼마만큼에 시간이 걸렸는지 output 창에 알려준다.

 

# 이런 쿼리를 날렸을 때 성능이 얼마나 느린지 빠른지를 판단할 수 있기 때문에 이기능이 유용하게 쓰인다.
-> 성능을 테스트 할때

 

# date 자료형에 값은 2017-07-26 이런 형태로 년도-월-일 형태에 날짜정보를 저장할 수 있게 된다.

=============================
insert into shopDB.indexTBL

select first_name, last_name, hire_date

from employees.employees;

select * from shopDB.indexTBL;
==============================
select * from shopDB.indexTBL where first_name = 'Mary'; ( where로 Mary만 검색 )

 

# 오른쪽 밑에 Execution Plan 메뉴 누르면 Full Table Scan
-> 이쿼리를 수행할때 어떤 동작에 의해서 수행하는지 보여준다.

 

# 쿼리를 전송한 후에 execution plan 메뉴에 들어가면 Full Table Scan이라는 문구가 작성 돼 있다.

Full Table Scan이라는 것은 테이블에 있는 전체 데이터를 조회했다라는 의미이다.
테이블에 모든 데이터를 다 읽어들여서 select 쿼리를 수행했음을 의미한다.
->전체내용중 select쿼리를 한경우

 

# 인덱스를 만드는 쿼리
create index 인덱스이름 on 테이블이름(컬럼이름);

 

# create index idx_indexTBL_firstname ( 원하는 index의 이름지정 )
on shopDB.indexTBL(first_name);   <- 테이블의 이름(컬럼이름)을 지정
-> shopDB에 indexTBL이라는 테이블에 first_name이라는 컬럼에 인덱스를 만들어라. 인덱스에 이름은 idx_indexTBL_firstname이라고 지정하겠다.
-> first_name 컬럼에 있는것을 바탕으로 index목차를 만든다.
-> 보다빠르게 select 할 수 있다.

-> 인덱스 후 select * from shopDB.indexTBL where first_name = 'Mary';

 

# 인덱스에 이름을 지정할 때는 일반적으로는 이름의 앞부분에 idx를 붙여 만들게 된다.

 

# 인덱스를 테이블에 만들어 운영하는 목적은 테이블 select 속도를 높이기 위해서이다.

 

# 전체 데이터를 대상으로 select를 수행하면 시간이 오래 걸리기 때문에 index를 사용해 목차를 만들어 둔다면 시간을 단축 할 수 있게 된다.

 

# 인덱스를 많이만들면 성능이 안좋아 질수도 있다.
-> 인덱스는 (이름, 주소) 보통 where조건을 걸어놓는다.

 

# 추 후에 index 파트를 따로 진행 예정

 

# mysql에 스토어드 프로시저를 진행 예정

 

-> 지난 시간 만들어놓은 view로 만든 uv_memberTBL;을 지운다.

 

 

-> winscp를 이용하여 employees 파일을 /root에 넣는다.

 

-> ls 명령어를통해 확인

 

-> workbench에 employees라는 데이터베이스를 만든다.

 

-> mysql -u root -p employees < employees.sql

-> employees.sql 이라는 파일에 데이터를 employees 라는 데이터베이스로 import작업

 

-> 저장되있는 데이터베이스의 rows를 몇개까지 제한할수있다.

-> 쿼리가 응답되는데 까지 얼만큼 시간이 걸렸는지 output창 오른쪽에 나와있다.

 

<테이블안에 데이터내용 삽입>

 

-> create 쿼리를 이용해 indexTBL 테이블을 만든다.

 

-> employees 데이터베이스에 employees 테이블을 확인한다.

 

-> insert 쿼리를 이용해 insert into 삽입하려는 테이블 select 삽입하려는 컬럼 from 데이터베이스.테이블 로 정보를 불러다가 삽입한다.

-> select * from shopDB.indexTBL; 을 이용해 삽입됬는지 확인

 

-> where 원하는 컬럼 = ' 원하는 문자 ';

 

-> create index 만들려는 인덱스 이름 on 데이터베이스.테이블(만들려는 인덱스 컬럼)

 

 

-> index 효과 index로 묶으면 찾는속도가 향상된다.

'데이터베이스' 카테고리의 다른 글

DBMS_day_14  (0) 2017.07.28
DBMS_day13  (0) 2017.07.27
DBMS_day11  (0) 2017.07.25
DBMS_day10  (0) 2017.07.24
DBMS_day09  (0) 2017.07.23
Comments