MSSQL에서는 Function-Based Index라는 개념이 없다고 함.
그러나, 계산된 열(Computed Column)을 사용하여 비슷한 기능을 구현할 수 있다고 함.
(Oracle의 virtual 컬럼과 동일한 기능인 듯 싶음)
1. 테이블 생성
CREATE TABLE MY_TABLE (
ID INT,
FIRST_NAME VARCHAR(20),
LAST_NAME VARCHAR(20)
);
2. Computed Column 추가
ALTER TABLE [MY_TABLE] ADD FULL_NAME AS CONVERT(NVARCHAR(100), TRIM(FIRST_NAME + ' ' + LAST_NAME));
3. 인덱스 추가
CREATE INDEX FULL_NAME_IDX ON MY_TABLE (FULL_NAME);
※ 2.에서 Computed Column 을 추가 할때 Stored Function을 사용한다면,
- 다른 유저에 있는 Function은 활용 할 수가 없었다.
☞ 동일한 유저에 동일한 기능을 하는 Function을 추가하여 해결.
- 사용자 Function이 동일한 인풋에 동일한 아웃풋을 보장할 수가 없다는 오류 발생..
(정확한 오류명은 아니지만, 이러한 문맥의 오류였던걸로 기억함)
☞ Function에 WITH SCHEMABINDING 키워드를 추가하여 해결.
※ 인덱스를 추가 할때,
- 2. Computed Column 의 크기가 너무 크다면 인덱스 설정을 할 수가 없었다.
☞ 컬럼의 크기를 적절하게 줄여서 인덱스 부여.
'DB > MSSQL' 카테고리의 다른 글
[MSSQL] MAX KEEP (0) | 2022.06.30 |
---|---|
[MSSQL] EXISTS 주의사항 (0) | 2022.06.21 |