학원에서 공부하다가
궁금해지고 자세히 알고싶어서 구글링하면서 찾아본 내용들입니다.
INDEX의 의미
RDBMS(관계형 데이터 베이스 관리 시스템)에서 검색속도를 높이려 사용하는 하나의 기술
INDEX = 색인
해당 TABLE의 컬럼을 색인화(따로 파일로 저장)하여 검색시 해당 TABLE의 레코드를 Full Scan 하는게 아니라
색인화 되어있는 INDEX파일을 검색하여 검색속도를 빠르게 한다.
INDEX는 TREE구조로 색인화,
RDBMS에서 사용하는 INDEX는 Balance Search Tree를 사용한다.
INDEX의 원리
INDEX를 해당 컬럼에 주게 되면 초기 TAVLE생성시 만들어진 *MYD(MySQL Data), MYI(MySQL Index), FRM(Format)
3개의 파일 중에서 MYI에 해당 컬럼을 색인화 하여 저장한다.
INDEX를 사용안할시 MYI 파일은 항상 비어있다. INDEX를 어떤 컬럼에 지정해 만들게 되면
해당 컬럼을 따로 인덱싱하여 MYI파일에 입력한다.
사용자가 SELECT 쿼리로 INDEX가 지정된 TABLE을 조회할시 TAVLE 전체를 검색하는것이 아니라
빠른 TREE로 정리해둔 MYI 파일의 내용부터 검색한다.
만약 INDEX를 지정하지 않은 테이블을 조회하는 SELECT쿼리라면 해당 TABLE을 Full Scan 하여 모두 검색한다.
INDEX의 장점
- 키 값을 기초로 하여 테이블에서 검색과 정렬 속도를 향상.
- 질의나 보고서에서 그룹화 작업의 속도를 향상.
INDEX의 단점
INDEX의 목적
인덱스를 지정 시 유의점.
Data Type의 정의
데이터 타입(자료형)이란 컴퓨터 시스템과 프로그래밍 언어에서 실수,정수,소수 자료형 등의 여러종류의 데이터를 식별하는 타입으로서, 해당 자료형에 대한 가능한 값, 해당 자료형에서 수행을 할수있는 명령어, 데이터의 형태, 의미, 크기와 해당 자료형의 값이 저장되는 방식이다,
MySQL데이터 타입
문자형 데이터타입
데이터 유형 | 정의 |
CHAR(n) | 고정 길이 데이터 타입(최대 255byte)- 지정된 길이보다 짦은 데이터 입력될 시 나머지 공간 공백으로 채워진다. |
VARCHAR(n) | 가변 길이 데이터 타입(최대 65535byte)- 지정된 길이보다 짦은 데이터 입력될 시 나머지 공간은 채우지 않는다. |
TINYTEXT(n) | 문자열 데이터 타입(최대 255byte) |
TEXT(n) | 문자열 데이터 타입(최대 65535byte) |
MEDIUMTEXT(n) | 문자열 데이터 타입(최대 16777215byte) |
LONGTEXT(n) | 문자열 데이터 타입(최대 4294967295byte) |
JSON | JSON 문자열 데이터 타입 - JSON 형태의 포맷을 꼭 준수해야 한다. |
숫자형 데이터 타입
데이터 유형 | 정의 |
TINYINT(n) | 정수형 데이터 타입(1byte) -128 ~ +127 또는 0 ~ 255수 표현할 수 있다. |
SMALLINT(n) | 정수형 데이터 타입(2byte) -32768 ~ 32767 또는 0 ~ 65536수 표현할 수 있다. |
MEDIUMINT(n) | 정수형 데이터 타입(3byte) -8388608 ~ +8388607 또는 0 ~ 16777215수 표현할 수 있다. |
INT(n) | 정수형 데이터 타입(4byte) -2147483648 ~ +2147483647 또는 0 ~ 4294967295수 표현할 수 있다. |
BIGINT(n) | 정수형 데이터 타입(8byte) - 무제한 수 표현할 수 있다. |
FLOAT(길이, 소수) | 부동 소수형 데이터 타입(4byte) -고정 소수점을 사용 형태이다. |
DECIMAL(길이, 소수) | 고정 소수형 데이터 타입고정(길이+1byte) -소수점을 사용 형태이다. |
DOUBLE(길이, 소수) | 부동 소수형 데이터 타입(8byte) -DOUBLE을 문자열로 저장한다. |
날짜형 데이터 타입
데이터 유형 | 정의 |
DATE | 날짜(년도, 월, 일) 형태의 기간 표현 데이터 타입(3byte) |
TIME | 시간(시, 분, 초) 형태의 기간 표현 데이터 타입(3byte) |
DATETIME | 날짜와 시간 형태의 기간 표현 데이터 타입(8byte) |
TIMESTAMP | 날짜와 시간 형태의 기간 표현 데이터 타입(4byte) -시스템 변경 시 자동으로 그 날짜와 시간이 저장된다. |
YEAR | 년도 표현 데이터 타입(1byte) |
이진 데이터 타입
데이터 유형 | 정의 |
BINARY(n) & BYTE(n) | CHAR의 형태의 이진 데이터 타입 (최대 255byte) |
VARBINARY(n) | VARCHAR의 형태의 이진 데이터 타입 (최대 65535byte) |
TINYBLOB(n) | 이진 데이터 타입 (최대 255byte) |
BLOB(n) | 이진 데이터 타입 (최대 65535byte) |
MEDIUMBLOB(n) | 이진 데이터 타입 (최대 16777215byte) |
LONGBLOB(n) | 이진 데이터 타입 (최대 4294967295byte) |
데이터 타입 선택 방법
MySQL은 다양한 데이터 타입을 지원하고 있는데, 데이터를 저장하는 데 적합한 데이터 타입을 고르는 것은 좋은 성능을 얻는 데 필수적이다.
- 타입은 작을수록 좋다하지만 저장할 값의 크기를 너무 작게 추정하지 않도록 주의해야 한다. 스키마의 이곳저곳에서 데이터 타입의 범위를 늘리는 작업은 어렵고, 시간을 많이 소모하기 때문이다.
- 일반적으로 데이터를 저장하고 표현하는 데 문제가 없는 데이터 타입 중 가장 작은 것을 골라야 한다. 보통 작은 데이터 타입일수록 디스크나 메모리, CPU 캐시에 더 적은 공간을 사용하기 때문에 더 빠르며 덜 소비한다.
- 타입은 단순한 게 좋다IP 주소를 사용할 수 있는 함수로 INET_ATON 함수와 INET_NTOA 함수가 있으니 참고
- 보통 간단한 데이터 타입을 처리할수록 CPU 사이클로 덜 소비한다. 예로 문자 비교는 문자 셋 (Character set)과 콜레이션 (Collation)으로 인해 복잡해지므로, 문자 비교보다는 정수 비교가 비용이 더 저렴하다. 날짜와 시간은 문자열로 저장하지 말고, MySQL의 내장 형식에 저장해야 하며 IP 주소는 정수를 이용해 저장해야 한다.
- 가능하면 NULL을 쓰지 말자NULL 허용 컬럼은 저장 공간도 더 많이 사용하며 NULL 허용 컬럼을 인덱싱할 땐 항목마다 한 바이트씩 더 들어간다. 만약 ‘값이 없다’라는 사실을 테이블에 기록해야 하더라도 굳이 NULL을 쓸 필요는 없을지 모른다. NULL 대신 0이나 특수한 어떤 값, 빈 문자열 등을 사용하는 걸 고려해보자.
- 컬럼은 되도록 NOT NULL (NULL 허용 안 함)로 정의해야 한다. NULL 허용이 기본값이다 보니 사용하는 응용 프로그램이 NULL을 저장할 필요가 없을 때조차 테이블에 NULL을 허용하는 컬럼을 포함한 경우가 많다. NULL을 저장할 의도가 아니라면 컬럼을 NOT NULL로 정의하자.
참조 사이트
'JAVA(폐쇄) > 독학내용' 카테고리의 다른 글
자바(JAVA) charAt(int i)-'0' 는 뭘까? (0) | 2023.03.22 |
---|---|
JAVA) %(모듈러) 모듈러 연산, 나머지 연산자 (0) | 2023.02.15 |
자바(JAVA) : sc.close();를 왜 써야 하는가? (1) | 2023.02.15 |