데이터베이스 개발자 질문과 답변 게시판
데이터베이스 개발/운영 관련 질문과 답변을 올리는 게시판입니다. 궁금하신 내용을 이곳에서 문의하시면 SQLER 분들의 답변을 받으실 수 있습니다. 문의를 하실때에는 최근 작업하신 특이 사항이나, 장애 발생 전 상황을 상세히 올려 주시면 답글을 적어주시는 SQLER분들의 답변이 더 정확할 수 있으니 도움 되시길 바랍니다. 쿼리 문의일 경우, 실제 문제가 재현되는 테이블생성, 샘플데이터 생성 쿼리를 함께 올려 주시면 더 빠르고 정확한 쿼리 문의 응답이 가능합니다.
안녕하세요 초보개발자입니다.
SQL SERVER 2012를 사용하고 있는데,
테이블 A에 대해서
DATETIME이 아닌 VARCHAR(8) 날짜 컬럼 X가 있습니다.
외부에서 자동으로 링크되어 들어오는 데이터라
날짜 규칙에 어긋나거나 날짜가 아닌 데이터가 들어오기도 합니다.
그래서 이 테이블 자료를 가져올때는
날짜규칙에 맞는 X의 ROW 데이터만 가져오게 되어있는데요.
데이터 건수가 많아서 조회에 시간이 많이 소요됩니다 ㅠㅠ
SELECT ...
FROM A
WHERE ISDATE(X)='1'
INDEX 가 먹지않더라구요 ㅠㅠ
쿼리속도 개선을 위한 ISDATE 함수를 대체할 방법이 없을까요?
쿼리 구문에서 컬럼에 함수 및 어떠한 연산이 포함된 경우에는 인덱스를 사용할 수 없습니다.
값이 결정적인 경우 계산된 컬럼을 사용하면, 계산된 컬럼에 인덱스를 걸 수 있는데
ISDATE(() 함수의 경우 비결정함수라 계산컬럼을 사용해도 안 될 것 같습니다.
제 생각에는 별도의 컬럼을 추가 및 인덱스 생성하고, 트리거에서 컬럼을 ISDATE()로 update 시키고
조회 쿼리는 추가한 컬럼이 1 인지를 비교하는 것으로 변경 하는 것이 어떨까 합니다.