기존테이블
TEST table
=============================
PK_ID | Name | age
기존 테이블에 새로운 필드(Withdrawal - 디폴트값 0)를 추가를 했습니다
그랬더니 새롭게 만든 필드(Withdrawal)가 모두 NULL로 되어있습니다 당연하겟죠
추가한 필드
TEST table
=============================
PK_ID | Name | age | Withdrawal
탈퇴여부를 조회 하는데 0: 이면 탈퇴안한거고 1 이면 탈퇴를 한거라고 한다면
탈퇴안한사람만 조회를 할려고 합니다
select * from test where Withdrawal <> 1
이라고 하는데 조회가 새롭게 등록한 사람만 표시가 됩니다
혹시나 핵서 특정 회원의 필드(Withdrawal)를 0으로 하니까 나오네요
NULL값을 가진 사람들도 나오게 할순 없나요
ISNULL(Withdrawal,0) <> 1 이라고 하니까 속도가 너무 늦어요
인덱스를 걸어도 늦네요
Comment 7
-
이리
2017.05.15 11:30
-
문상연
2017.05.15 11:38
알려주신대로 해봣는데 속도가 너무 늦네요
데이타가 약 5만건정도 되는데요
WHERE (Withdrawal <> 1) 하는거 보다 WHERE (Withdrawal <> 1 OR Withdrawal IS NULL) 이렇게 하면 속도가 눈에 띄게 늦어요
1초정도 늦어요
조회 속도를 빠르게하는 방법은 없을까요?
-
이리
2017.05.15 12:05
WHERE (Withdrawal <> 1) 조건 일 경우와 WHERE (Withdrawal <> 1 OR Withdrawal IS NULL) 조건일 경우 결과 건수가 다르지 않나요?
기존 NULL 데이터를 UPDATE 하시는건 어때요?
-
문상연
2017.05.15 12:50
결과건수는 당연히 다르죠
더 많죠
님 말씀대로 기존 데이타도 0으로 업데이트를 햇긴했습니다
다른 방법은 없을까요?
-
이리
2017.05.15 14:19
아무런 정보도 없이 판단하기는 어렵습니다.
실제 실행계획과 테이블 정보를 올려주시면 고수님들이 조언해 주실거라 생각합니다.
-
문상연
2017.05.15 14:27
네 알겠습니다
고맙습니다
-
건우아빠
2017.05.16 11:40
새로운 컬럼 Withdrawal - 디폴트값 0 추가 하셨서 기존 값이 null 이므로 값을 0이나 1로 업데이트 하시는게 정답입니다.
다른 답을 굳이 찾으실 필요는 없을듯 합니다 .
기존 NULL 값을 업데이트 하시는건 어떤가요?
조건은 아래와 같이 검색하시면 될거 같습니다.
WHERE (Withdrawal <> 1 OR Withdrawal IS NULL)
WHERE 조건에서 좌변을 가공하면 인덱스가 사용되지 않습니다.