DB/MSSQL

[MSSQL] Function-Based Index

울면서개발하기 2023. 7. 4. 09:29

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