반응형

Amazon Linux2에서 MariaDB 실행 및 정지 등 커맨드를 정리했습니다.

 

실행 시

sudo systemctl start mariadb

 

정지 

sudo systemctl start mariadb

 

재시작

sudo systemctl restart mariadb

 

상태확인

sudo systemctl status mariadb

 

 

그런데 systemctl으로 실행이 안 되는 경우에는 아래처럼 직접 접근해야 된다.

 

시작

sudo /etc/init.d/mysql start

 

정지

sudo /etc/init.d/mysql stop

 

재시작

sudo /etc/init.d/mysql restart

 

상태확인

sudo /etc/init.d/mysql status

반응형
반응형

인덱스(Index)

데이터베이스에서 Index라는 개체는 테이블의 검색 능력을 향상시키는 데에 중요한 역할을 합니다. 인덱스는 어떻게 생성하는 거고 왜 사용해야 할까요?

 

검색 능력 향상

인덱스를 사용하지 않고 검색하면 조건에 맞는 데이터를 찾기 위해 테이블에 있는 데이터를 모두 조회합니다. MySQL에서 제공하는 샘플 데이터 employees에서 데이터를 조회하여 확인해봅시다.

 

explain select * from employees where first_name = 'Georgi';

 

샘플 데이터를 가지고 위 쿼리를 실행했습니다.

 

결과를 보면 네번째 컬럼 type에 ALL이 들어간 걸 볼 수 있습니다. 또 row 컬럼의 값이 299778인데 이는 해당 데이터를 조회하기 위해 순회한 열의 갯수입니다. 즉, 인덱스를 사용하지 않고 검색을 했을 때는 테이블에 있는 모든 데이터를 순회하기 때문에 속도가 느려집니다. 그러면 인덱스를 사용하면 어떻게 될까요?

 

인덱스 생성

create index idx_employees_first_name on employees(first_name);

 

위 쿼리는 테이블 'employees'의 컬럼 'first_name'에 인덱스를 생성하는 쿼리입니다. create index 뒤에 'idx_employees_first_name'에서 idx는 index를 의미하고 그 뒷부분은 테이블 이름과 컬럼 이름입니다. 이렇게 생성하고 앞에서 검색했던 내용을 다시 검색해보겠습니다.

 

아까는 type에 ALL이라고 적혀있었으나 ref(참조)로 바뀐 것을 볼 수 있고 rows도 253으로 줄어든 것을 볼 수 있습니다. 기존에 모든 데이터를 순회하여 찾는 방식과 다르게 인덱스를 이용하면 해당 데이터가 어디 있는지 알고 있기 때문에 검색 속도가 줄어들게 되고 데이터가 많을 때 검색 속도를 향상시킬 수 있는 데이터베이스 튜닝은 한 가지 방법입니다.

반응형
반응형

프로시저(Procedure)

 

미리 SQL문을 선언하고 데이터베이스에 저장해서 사용하는 것으로 함수처럼 호출하여 사용할 수 있습니다.

 

프로시저를 사용하는 이유

1) 하나의 요청으로 여러 SQL문을 실행할 수 있습니다.

2) 미리 구문 분석 및 내부 중간 코드로 변환을 끝내므로 처리 시간이 단축됩니다.

3) 데이터베이스 트리거와 결합하여 복잡한 규칙에 의한 데이터의 참조무결성 유지가 가능하게 됩니다.

4) Java 등의 호스트 언어와 SQL 문장이 확실하게 분리되고 웹사이트 운용 중에도 프로시저의 교체에 의한 수정이 가능하기 때문에 보수하기 편해집니다.

 

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."


 

프로시저 생성 및 호출 방법

아래 코드는 MariaDB(혹은 MySQL)에서 학생 정보를 불러오는 프로시저를 생성하고 호출하는 코드입니다.

 

-- 프로시저 생성

DELIMITER $$
CREATE PROCEDURE getStudent()
BEGIN
    SELECT ID, NAME, AGE, DEPT_ID
    FROM STUDENT
    ORDER BY ID
END $$
DELIMITER;


-- 프로시저 호출

CALL getProcedure();

 

반응형
반응형

INNER JOIN과 OUTER 조인

INNER JOIN : 두 개의 테이블 A, B가 있을 때 이들의 교집합을 찾는 JOIN입니다.

OUTER JOIN : 두 개의 테이블 A, B가 있을 때 이들의 합집합을 찾는 JOIN입니다.

 

예를 들어, A와 B 테이블에 다음과 같이 자료가 들어가 있을 때 어떻게 사용하는지 봅시다.

 

A B
1 3
2 4
3 5
4 6

 

A와 B 테이블의 INNER JOIN 수행

INNER JOIN을 수행하면 두 테이블에 공통 데이터가 있는 열이 출력됩니다.

 

SELECT * FROM A
INNER JOIN B ON A.a = B.b

 

위의 쿼리를 수행 시 아래와 같이 데이터가 출력됩니다.

 

A B
3 3
4 4

출력 결과에서 알 수 있듯 두 테이블에 공통으로 들어간 열만 출력되는 것을 볼 수 있습니다.

 

A와 B 테이블의 LEFT OUTER JOIN 수행

LEFT OUTER JOIN을 수행하면 기준이 되는 테이블의 모든 열에 B와 공통되는 부분을 추가로 얻을 수 있습니다.

 

SELECT * FROM A
LEFT OUTER JOIN B ON A.a = B.b

 

위의 쿼리를 수행 시 아래와 같이 데이터가 출력됩니다.

 

A B
1 null
2 null
3 3
4 4

출력 결과에서 알 수 있듯 두 테이블 중 기준이 되는 A 테이블의 열은 모두 출력하고 B에서는 A와 곂치는 부분만 출력하는 것을 알 수가 있습니다.

 

반응형

+ Recent posts