암호화된 문자열을 담은 varbinary(100) 필드가 있는데
(ex) : 0xA62E4F43F514AA993DFF71A514E7E32A1119D267349BEEAF20BE28DF15BD7FEE)
복호화 이슈는 없고 그냥 암호화된 값과 동일한 값만 있는지 체크하면 되는 상황 입니다.
(암호화된 값으로 동일 검색)
이런경우 varbinary(100) 필드에 바로 인덱스 생성하는게 일반적인 방법 인가요?
아니면 varbinary(100) 필드값을 checksum 한 필드를 추가해서 인덱스 필드로 활용하는게
성능면에서 더 좋은가요?
보통 길이가 큰 문자열 필드 인덱스시에 checksum 필드를 많이 활용하는데 varbinary(100) 정도
크기의 필드는 어떤게 효율적인지 궁금합니다.
Comment 5
-
minsouk
2015.07.29 11:06
-
버즈베잇
2015.07.29 11:36
답변 감사 드립니다..
-
이재학_302349
2015.07.29 11:39
checksum은 유일함을 보장하지 않습니다. 그러므로 식별자로 사용하실 수는 없습니다.
굳이 사용하자면 cheksum한 컬럼에 인덱스를 생성했을 경우 반드시 lookup을 해야합니다.
declare @str varbinary(100)
set @str = ...
select ..
from ..
where cheksum_암호화된문자열 = checksum(@str)
and 암호화된문자열 = @str
-
버즈베잇
2015.07.29 14:37
collision 문제로 당연 원본값과 확인 할 예정 입니다.
감사 합니다.
-
minsouk
2015.07.29 18:22
네 checksum 예제는 대부분 이렇게 원본과 다시 비교하도록 되어있죠...그래서 말씀 안드렸는데 재학님이 좋은거 지적하셨네요...
checksum 은 int 니 varbinary 보다 저장 공간이 훨씬 적게 들겠죠...만드는게 좋아 보입니다.
그러나 checksum 추가로 인해 프로그램 로직을 바꾸어야 한다는 것은 손해이니 이 부분만 판단해보시고 작업하시면 되겠네요