한달에 6억개에서 8억개 정도 쌓이는 테이블이 있습니다.
스키마는 이렇습니다.
CREATE TABLE [dbo].[tempData](
[tempID] [int] IDENTITY(1,1) NOT NULL,
[tempType] [varchar](15) NULL,
[tempData] [varchar](max) NULL, -- 2000글자정도의 데이터
[tempDatetime] [datetime2](7) NULL, -- 중복허용 클러스트 인덱스
[tempSrcIP] [varchar](15) NULL,
[tempDestIP] [varchar](15) NULL,
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
인서트는 1분에 4만개 정도 입니다.
날짜타입에 인덱스를 걸어주어서 조회를 해주고 있는데 오래된 데이터 일수록 쿼리 검색 속도가 현저하게 떨어집니다.
테이블을 둘로 나누었더니 쿼리 속도는 어느 정도 나오는것 같습니다.
CREATE TABLE [dbo].[tempData](
[tempDatetime] [datetime2](7) NULL,
[tempID] [int] IDENTITY(1,1) NOT NULL,
[tempSrcIP] [varchar](15) NULL,
[tempDestIP] [varchar](15) NULL
) ON [PRIMARY]
tempID를 리턴 해주어 tempData_Raw 테이블에 넣어주는 형식입니다.
CREATE TABLE [dbo].[tempData_Raw](
[tempID] [int] NOT NULL,
[tempDATA] [varchar](max) NOT NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
이런식으로 둘로 나누거나 아니면 하나의 테이블을 가지고 파티션으로 나누어서 사용하려고 합니다.
둘로 나누는 것이 맞는건지 아니면 다른 방법이 있나 해서 여쭤봅니다.
* 주기적으로 삭제 쿼리도 합니다.