DB SIDU와 인덱스와 VIEW

이선우·2024년 10월 3일
0

CS 공부

목록 보기
10/10

데이터 입력 - INSERT

CREATE TABLE 직후에는 아무런 행도 없는 상태이다. 그 후에 INSERT를 사용해서 DB를 삽입한다

INSERT INTO 테이블이름 VALUES (값1, 값2, 값3, ...);

INSERT를 실행할 떄에는 NOT NULL이 걸린 필드나 외래키 참조 상황인 필드를 고려해서 INSERT를 실행해야 한다.

데이터 조회 - SELECT

SELECT의 순서

SELECT 컬럼
FROM 테이블
WHERE 조건
GROUP BY 그룹화할컬럼
HAVING 필터
조건
ORDER BY 정렬할_컬럼
;

연산 및 집계함수

  • COUNT: SELECT COUNT(*) FROM products;
  • SUM: SELECT SUM(price) FROM products;
  • AVG: SELECT AVG(price) FROM products;
  • MAX: SELECT MAX(price) FROM products;
  • MIN: SELECT MIN(price) FROM products;

LIKE를 이용한 패턴 검색

WHERE를 이용해서 조건 검색을 하기 위해서는 문자열이 완전하게 일치해야 한다.

SELECT name FROM products WHERE name = 'monitor';

그러나 LIKE를 사용하면 부분적 일치로도 검색을 할 수 있다.
사용 가능한 와일드 카드는 %, _ 두 가지이다.
%는 임의의 문자열을 뜻하고 _는 하나의 임의의 문자를 뜻한다

SELECT name FROM products WHERE name LIKE '_onitor';
SELECT name FROM products WHERE name LIKE '%monitor';

GROUP BY & HAVING

SELECT 컬럼
FROM 테이블
WHERE 조건
GROUP BY 그룹화할컬럼
HAVING 필터
조건
ORDER BY 정렬할_컬럼
;

테이블 내 데이터를 그룹으로 묶어 조회하고 싶을 때, 주로 집계 함수와 함께 사용한다
HAVING을 상요해서 그룹화한 결과를 필터링 할 수 있다.

서브 쿼리

서브 쿼리란 퀴리 속의 select이다.

데디터 수정 - UPDATE

UPDATE를 사용해서 데이터의 수정을 할 수 있다.

UPDATE 테이블 SET 열=값, 열=값 [WHERE 조건식];

where를 이용해서 특정 행일 식별해 조건에 일치하는 모든 행을 대상으로 업데이트한다.
where가 생략된 경우 모든 행이 갱신을 하며 set에 사용된 =는 대입 연산자이다.

참조 시 UPDATE(on update)

  • cascade: 참조 데이터 업데이트 시 상대방 데이터도 함께 업데이트
  • set null: 참조 데이터 업데이트 시 상대방 테이블의 참조 컬럼을 NULL로 업데이트
  • set default: 참조 데이터 업데이트 시 상대방 테이블의 참조 컬럼을 Default 값으로 업데이트
  • restrict: 참조하고 있을 경우, 업데이트 불가
  • no Action: Restrict와 동일, 옵션을 지정하지 않았을 경우에 자동으로 선택

데이터 삭제 -DELET

조건에 맞는 데이터 삭제

DELETE FROM 테이블명 WHERE 조건식;

테이블의 모든 데이터 삭제

DELETE FROM 테이블명;

참조 시 DELETE(on delete)

  • cascade: 참조 데이터 업데이트 시 상대방 데이터도 함께 삭제
  • set null: 참조 데이터 업데이트 시 상대방 테이블의 참조 컬럼을 NULL로 업데이트
  • set default: 참조 데이터 업데이트 시 상대방 테이블의 참조 컬럼을 Default 값으로 업데이트
  • restrict: 참조하고 있을 경우, 삭제 불가
  • no Action: Restrict와 동일, 옵션을 지정하지 않았을 경우에 자동으로 선택

인덱스

인덱스란 테이블을 더 빠르게 조회하기 위한 참조 수단으로 실무에서 검색 속도를 향상시키기 위해서 빈번히 사용한다.

이미지와 같이 인덱스는 단위로 사용한다

인덱스가 없다면 데이터를 찾기 위해서 모든 테이블의 데이터를 스캔해야한다.

인덱스의 부작용

  • 인덱스를 저장할 추가적인 저장 공간이 필요하다
  • 인덱스를 작성할 때 시간이 사용된다.
  • SELECT가 아닌 INSERT, UPDATE, DELETE 시 성능이 악화된다

인덱스의 종류

  • 클러스터형 인덱스
  • 보조 인덱스

클러스터형 인덱스 (Clustered index)

PRIMARY KEY (우선 지정) / UNIQUE + NOT NULL 제약 조건 지정 시 자동으로 생성된다.
테이블 당 하나이며 행 데이터가 인덱스로 지정된 데이터에 대해 자동 정렬된다.

select 했을 때 primary key에 대해 자동 정렬되는 이유이다

보조 인덱스 (Secondary index)

테이블 당 여러 개가 사용 가능하며 중복이 가능하다
고유키로 지정된 컬럼은 자동으로 보조 인덱스가 생성되며 행 데이터가 인덱스로 지정된 데이터에 대해 자동으로 정렬되지 않는다

보조 인덱스 생성
CREEATE INDEX 인덱스명 ON 테이블명;

인덱스 조회
SHOW INDEX FROM 테이블명;

인덱스 삭제
DROP INDEX 인덱스명 FROM 테이블명;

VIEW

뷰란 가상의 테이블로 SELECT의 결과를 마치 테이블과 같이 간주한 것이다. VIEW로 인해 쿼리를 단순화할 수 있고 모든 데이터를 보여줄 필요가 없어진다

뷰 생성
USE VIEW 뷰이름 AS SELECT;

뷰 삭제
DROP VIEW 뷰이름;

뷰를 조회하는 것은 제한이 없지만 삽입, 수정, 삭제 등은 제약이 있을 수도 있다

JOIN

JOIN이란 관계형 데이터베이스의 핵심으로 여러 개의 테이블을 하나로 묶는 방법이다.

JOIN의 종류에는 INNER JOIN, (LEFT, RIGHT, FULL) OUTER JOIN 이 있다.

INNER JOIN

SELECT 열명 FROM 테이블명1 INNER JOIN 테이블명2 ON 결합조건
테이블명 1과 테이블명 2 결합 조건을 모두 만족하는 데이터만을 선택해 결합(교집합)

LEFT OUTER JOIN

테이블 1을 모두 선택하고 테이블2를 합치되 매칭되지 않으면 NULL

RIGHT OUTER JOIN

테이블 2를 모두 선택하고, 테이블1를 합치되 매칭되지 않으면 NULL

FULL OUTER JOIN

두 테이블 모두 선택하고 매칭되지 않으면 NULL

관련 면접 질문 리스트

1. WHERE 과 HAVING의 차이점은?

WHERE은 그룹화되기 전에 데이터를 필터링하는데 사용되고, HAVINGGROUP BY로 그룹화된 결과에 대해 조건을 걸 때 사용된다

2. 인덱스의 장단점은?

인덱스는 테이블의 특정 열에 대해 데이터를 빠르게 검색할 수 있도록 도와줍니다. SELECT 쿼리의 속도를 크게 향상시킬 수도 있지만 반대로 INSERT, UPDATE, DELETE 작업의 성능은 저하됩니다. 이는 데이터 변경 시 인덱스도 함께 업데이트 되어야 하기 때문입니다.

3. DELETE와 TRUNCATE의 차이점은?

DELETEWHERE 조건을 사용해 특정 행을 사용할 수 있으며, 트랜잭션 로그를 남겨서 복구를 할 수 있습니다. 반면에 TRUNCATE는 테이블의 모든 행을 빠르게 삭제하지만 트랜잭션 로그를 남기지 않아서 복구가 불가능합니다. 또한 TRUNCATE는 자동으로 모든 행을 삭제하므로, 테이블 구조는 그대로 유지됩니다

4. ON DELETE CASCADE 란?

ON DELETE CASCADE는 외래 키 제약 조건을 설정할 때 사용하는 옵션입니다. 부모 테이블의 데이터가 삭제될 때, 해당 데이터를 참조하는 자식 테이블의 데이터도 자동으로 삭제됩니다. 이를 통해서 데이터의 무결성을 유지할 수 있습니다

profile
백엔드 개발자 준비생

0개의 댓글