2023. 03. 10 (3 week)

김준태·2023년 3월 10일
0

멋쟁이사자처럼

목록 보기
13/16
post-thumbnail

SQL

INDEX (일종의 색인)

  • 테이블의 열(컬럼)에 대한 검색 성능을 향상시키기 위해 사용되는 데이터 구조
  • 인덱스는 테이블의 기본 키PRIMARY KEY나 고유한UNIQUE한 값을 가지는 열에 대해서 생성된다.
  • 검색 성능을 향상시키는 반면, 삽입, 수정, 삭제 작업의 성능을 떨어뜨리는 단점도 있다.

EXPLAIN

  • SQL에서 특정 쿼리의 실행 계획을 볼 수 있는 명령어
  • SELECT 문과 함께 실행하면 데이터베이스 엔진이 요청한 데이터를 검색하는 방법에 대한 쿼리 실행 계획을 생성
CREATE TABLE `animal`(
	`id` INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
	`name` VARCHAR(100) NOT NULL
);
.
INSERT INTO `animal`
SET `name` = '기린';
.
INSERT INTO `animal`
SET `name` = '사자';
.
EXPLAIN SELECT *
FROM `animal`;
# 실행결과

SELECT SQL_NO_CACHE

  • MySQL에서 쿼리 캐시를 사용하지 않도록 지정하는 옵션
  • SQL_NO_CACHE를 사용하면 해당 쿼리를 실행할 때 캐시를 사용하지 않도록 강제할 수 있다.
  • 따라서 매번 새로운 결과를 반환하여 쿼리 실행 시간을 예측 가능
# 쿼리 결과가 캐시 O
SELECT *
FROM `animal`
WHERE `name` = '기린';
.
# 쿼리 결과가 캐시 X
SELECT SQL_NO_CACHE *
FROM `animal`
WHERE `name` = '기린';

CHAR 와 VARCHAR 의 차이

CHAR

  • 고정 길이 문자열 데이터 타입
  • 고정된 길이를 가지므로 사용시 빠르다.
# SET `name` = 'kimjuntae'라고 저장하면 'kimjuntae      '로 저장
# 공백을 채운 15자리 문자열로 저장
`name` CHAR(15)

VARCHAR

  • 가변 길이 문자열 데이터 타입
  • 문자열 크기에 따라 공간을 동적으로 할당하므로 CHAR보다 약간 느릴 수도 있다.
# SET `name` = 'kimjuntae'라고 저장하면 'kimjuntae'로 저장
# 15자리로 지정했지만, 9자리 문자열로 저장
`name` VARCHAR(15)

DELETE 와 TRUNCATE 의 차이

행을 선택적으로 삭제하거나 롤백이 필요하면 DELETE를 사용하고, 모든 데이터를 삭제하고 테이블 크기를 초기화해야하는 경우 TRUNCATE를 사용하는 것이 좋다.

DELETE

  • 테이블에서 행(레코드)을 삭제하는 데 사용
  • 삭제한 행에 대한 로그를 남기며, 롤백 가능 (데이터의 복구나 복원 등을 위해서 유용)
  • WHERE 절을 사용할 수 있다.

TRUNCATE

  • 테이블에서 모든 데이터를 한 번에 삭제
  • 테이블의 모든 행을 삭제하며, 로그를 기록하지 않는다. (롤백 불가능)
  • WHERE 절을 사용할 수 없다.

0개의 댓글