본문 바로가기
개발일지/멀티캠퍼스 프로젝트형 AI 국비지원

2022.01.25 Day-7 멀티캠퍼스 Mysql

by 다니엘의 개발 이야기 2022. 1. 25.
320x100

오늘은 딱히 어렵지 않았다.

다만, 이해는 되나 활용에 있어서는 그냥 계속 만지작 거려봐야 뭔가 익숙해지겠다 싶었다.

어디에 메모해 놓고 계속 볼만한건 아니고

예제 형식으로해서 만지작 거리는게 가장 좋을것같다.

 

그럼에도 분명히 적어놔야 하는 부분이 있어서 적어놓는다.

 

중요 포인트

ralational DBMS (관계형 DBMS)는
관계형 DBMS로 처리해야한다.

그 외에 SNS에서 동시 다발적으로 나오는 정형화되지 않은 데이터를 처리하는것이
No SQL이다.


명령 프롬프트에서
mysql -u root -p
로해서 mysql을 실행해주고

exit를 해준다.

그러면 정상 프롬프트로 돌아오는데,
이때 cd 원하는 파일이 들어있는 경로
하고 엔터해주면 이쪽으로 경로가 바뀐다.

이 상태에서 다시 mysql -u root -p를 해준다.

그리고
source 파일넘버.sql 이라고 한다.
우리의 실습 용으로는 source employees.sql
였다.

오라클에서는 스키마가 다른 의미지만
mysql에서는 스키마가 데이터베이스를 지칭한다.

 

마지막으로는 인덱스를 설정해서 하는 작업이 있었는데

 

-- 테이블에 데이터를 입력하고 데이터를 추출하는 SQL구문
-- 데이터 추출
-- SELECT 컬럼명 FROM 테이블명;
-- * => 모든 컬럼을 지칭

SELECT * FROM shopdb.membertbl;

# SQL 구문을 이용해야 해요!
# SQL 이라고 불리는 관계형 데이터베이스용 언어를 사용해야 한다.
# SQL은 표준이고 모든 관계형 데이터 베이스에 공용으로 사용이 가능
# -- 명령 뒤에 한칸을 꼭 띄어야 주석이 된다.

INSERT INTO shopdb.membertbl VALUES('hong','홍길동','서울');
INSERT INTO shopdb.membertbl VALUES('shin','신사임당','인천');
INSERT INTO shopdb.membertbl VALUES('kim','김연아','광주');


SELECT * FROM shopdb.producttbl;
-- productTBL에 데이터를 삽입 => INSERT 구문이용
INSERT INTO shopdb.producttbl VALUES('컴퓨터',1000,'2022-01-01','삼성',5);
INSERT INTO shopdb.producttbl VALUES('세탁기',2000,'2022-01-02','LG',2);
INSERT INTO shopdb.producttbl VALUES('냉장고',1500,'2022-01-05','대우',4);
INSERT INTO shopdb.producttbl VALUES('노트북',10000,'2022-01-10','레노버',2);

SELECT * FROM shopdb.membertbl;
SELECT memberName, memberAddr FROM shopdb.membertbl;
SELECT memberName, memberAddr FROM shopdb.membertbl WHERE memberName = '아이유';

-- -------------------------------------------------------------------------------
-- Database의 Index(색인, 파이썬의 인덱스와 다름) 책 맨 뒤의 단어를 인덱스 색인으로 어디에 있는지 확인이 가능하다.
-- Index는 column에 설정하는 거예요! => 그러면 해당 column안에 있는 값을 이용해서
-- B-Tree(Balanced Tree)형태로 데이터를 분배시켜서 저장하는 Index를 따로 생성해요!

-- 테이블을 하나 만들거예요 => SQL 구문을 이용해서
CREATE TABLE shopdb.indexTBL (
first_name VARCHAR(14),
    last_name VARCHAR(16),
    hire_date DATE
);


-- 데이터를 입력해야 해요 (500명 입력할거예요)
-- 하나하나 입력하기 보다 기존에 데이터를 이용해서 입력할 거예요!

SELECT first_name, last_name, hire_date FROM employees.employees LIMIT 500;
-- 위에 살짝 눈을 크게 뜨고 보면.. Limit to 1000rows가 있다. 

INSERT INTO shopdb.indexTBL
SELECT first_name, last_name, hire_date FROM employees.employees LIMIT 500;

SELECT * FROM shopdb.indexTBL;

-- 이제 first_name이 Mary인 사람을 찾을거예요!
select * from shopdb.indextbl WHERE first_name = "Mary";

-- 잘 찾았어요 어떻게 이걸 찾았을까요?
-- Execution plan

-- 특정칼럼(first_name)에 index를 설정해서 B-tree를 생성

create index idx_indextbl_firstname on shopdb.indextbl(first_name);

select * from shopdb.indextbl WHERE first_name = "Mary";
-- 인덱스는 많을 수록 좋은거 아닌가요?(여러칼럼에 칼럼마다 index를 설정하면 좋은거 아닌가요?)
-- 인덱스를 설정하면 해당 칼럼의 데이터를 이용해서 B-Tree라는 자료구조를 만들어요
-- 그런데 데이터가 추가되니 변경되거나 삭제되면 이 B-Tree 구조로 다시 만들어야 합니다.
-- Overhead가 발생
-- 그래서 전체적인 performance를 따져서 인덱스를 설정해야 합니다.


인덱스가 설정된 이후에 검색하는것과

전체 결과값중에 검색하라고 명력하는것은

속도, 연산에서도 상당한 차이를 보였다.

 

자료가 커질 수록 이 기능은 매우매우매우 중요한 것이라고 직감적으로 느껴졌다.

전체 파일을 끌어와서 검색할때는 과부화 되듯이 빨간색으로 Excution plan에 나왔는데

인덱스를 이용하여 일부를 검색할 때는 원활한 듯이 초록색으로 Excution plan에 나왔다.

 

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

이건 강사님이 알려주신건아니고, 뭔가 알려주시는데 이상한 점을 발견해서

좀 테스트를 해봤는데,

문자열 표시할때 ''로 하라고 하셨는데, 사실 ""로 해도 잘 나오고

대문자로 표기 하시던데 사실상 모두다 소문자로 적어도 동일하게 작동한다.

아마 나중엔 뭔가 엮여있는것에 대한 문제가 있을수 있겠으나

그건 그때고,

일단 지금은 그럴수도 있다는 가능성을 담아 뒀다는것에 만족하자.

어차피 연습용 데이터 만드는거라 나중에 재사용하지도 않을테니깐

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

 

오늘 점심은 진짜 12년만에 틈새라면 매운맛 먹었는데

와... 속이 아직까지 아려오네.. 4시간넘게

근데 또 먹고싶다 츄릅

혀가 얼얼해서 못 먹겠는데 계속 땡기네 ...

아내가 독일에 가있는 3주의 자유시간동안

5kg 이상증량 돼지 or 10kg 이상 감량 원래 내몸

으로 될것같은 느낌적인 느낌이 든다..

암튼 먹고싶다.. 츄릅...

뭐이렇게 먹고싶은게 많냐..

 

순대국, 떡볶이, 순대, 족발, 보쌈, 라면,라멘 등등

300x250