IP주소를 저장하기 위해 사용하는 데이터 타입은 무엇이 적당할까?
1. 1개의 VARCHAR(15) 컬럼
A. 장점
i. 가독성이 높다.
ii. 테이블 레이아웃이 간단하다.
B. 단점
i. 저장 공간 비용이 높다. (7 ~ 15Byte)
ii. 정렬 및 범위 검색이 어렵다.
2. 4개의 TINYINT 컬럼
A. 장점
i. 저장 공간을 줄일 수 있다. (4Byte)
ii. 정렬 및 검색이 쉽다.
iii. 가독성이 좋은 편이다.
B. 단점
i. IP주소 문자열과의 변환 비용이 존재한다.
ii. 테이블 레이아웃이 복잡해진다.
3. 1개의 INT 컬럼
A. 장점
i. 저장 공간을 줄일 수 있다. (4Byte)
ii. 정렬 및 검색이 쉽다.
iii. 테이블 레이아웃이 간단하다.
B. 단점
i. 가독성이 매우 낮다.
4. 1개의 VARCHAR(15) 컬럼 + 1개의 INT 컬럼
A. 1번과 3번을 모두 사용하는 방식
B. 장점
i. 정렬 및 검색이 쉽다.
ii. 가독성이 높다.
iii. 테이블 레이아웃이 간단한 편이다.
iv. Read의 경우 별도의 변환이 필요하지 않다. (이미 변환된 두 가지 타입을 저장)
C. 단점
i. 저장 공간 비용이 높다. (11 ~ 19Byte)
3번이나 4번을 사용하는 경우, 변환을 위한 UDF가 필요하다.
- IP주소를 int형으로 변환하기.
CREATE FUNCTION dbo.FN_IP2IPNumber (
@vchIP varchar(15)
)
RETURNS int
AS
BEGIN
RETURN
((CAST(PARSENAME(@vchIP, 4) AS int) - 128) * 16777216) +
(CAST(PARSENAME(@vchIP, 3) AS int) * 65536) +
(CAST(PARSENAME(@vchIP, 2) AS int) * 256) +
CAST(PARSENAME(@vchIP, 1) AS int);
END
GO
- int형으로 변환된 IP주소를 문자열로 변환하기.
CREATE FUNCTION dbo.FN_IPNumber2IP (
@intIPNumber int
)
RETURNS varchar(15)
AS
BEGIN
RETURN
CAST(((@intIPNumber & 0xFF000000) / 16777216) + 128 AS varchar(3)) + '.' +
CAST((@intIPNumber & 0x00FF0000) / 65536 AS varchar(3)) + '.' +
CAST((@intIPNumber & 0x0000FF00) / 256 AS varchar(3)) + '.' +
CAST((@intIPNumber & 0x000000FF) AS varchar(3));
END
GO
'SQL Server > SQL Server Tip & Tech' 카테고리의 다른 글
varchar 타입으로 저장한 IP주소의 정렬 (2) | 2008.07.24 |
---|---|
제약 조건 Enable 할 때 주의할 점 - WITH CHECK 옵션 (0) | 2008.07.21 |
윤년 판단하는 함수 (0) | 2008.07.16 |
날짜와 복합키를 이룬 IDENTITY 컬럼의 값 순환시키기 (0) | 2008.07.10 |
diskpart.exe를 사용한 파티션 오프셋 설정으로 디스크 I/O 최적화 하기 (5) | 2008.07.08 |