안녕하세요. 고수님들.
테이블 설계을 하는데. 다중선택 하는 필드가 있고 나중에 검색을 해야 해서
명칭 : A, B, C, D
테이블 입력시 "A|", "A|B|", "C|D", "A|D" 이런식으로 입력 되고
검색시 "A" 가 들어간 검색을 할려 합니다.
이럴경우 입력값 이 "A" 와 "a" 로 하는 경우 속도 차이가 나는지?
다중선택시 더 좋은 테이블 설계법이 있는지
고수님들의 조언 부탁 드립니다.
1. 대소문자 구별에 대해
컬럼을 binary로 하지 않으신다면, 대소문자 구별은 collation에 의해 결정됩니다.
Case-insensitive한 collation은 _ci가 붙습니다. (예:utf8_general_ci)
2. LIKE
만약 A|B, A|D와 같이 항상 A가 먼저 나온다면 LIKE검색시 %를 앞에 주실 필요는 없을 것 같습니다.
LIKE 'A%'가 LIKE '%A%'보다 월등히 빠른 결과를 보여줍니다.
3. 정규화
값이 굉장히 많고, 앞으로도 추가될 여지가 있다면, 개인적으로는 정규화를 할 것 같습니다.
예를 들어, 게시물에 대해 태그를 단다고 할 때,
비정규화 : 해당 게시물이 보관되는 테이블에 tag컬럼을 추가하고 tag1,tag2,tag3로 입력
정규화 : tag 테이블(tag_T), 게시물 테이블(board_T), 관계 테이블(board_tag_T)로 분리하여 board의 UID와 tag의 UID의 관계를 보관.