2014. 8. 22. 10:18ㆍDatabase
일부 ASP.NET Membership Table에는 Lowered* Column을 따로 관리하는 것을 볼 수 있습니다.
예를 들어 SqlMembershipProvider를 위한 Membership Table(혹은 asp_regsql 도구를 통해 생성된 Table) 중에서 다음 컬럼을 볼 수 있습니다.
- aspnet_Applications.LoweredApplicationName
- aspnet_membership.LowerEmail
- aspnet_users.LoweredUserName
이 것은 왜 쓰는 것이고 언제 사용해야 할까요?
목적
Lowered* Column들은 Calculated Column의 목적으로 생성되었습니다. Calculated Column이란 쿼리를 수행하는데 있어 반복적으로 사용되는 계산을 미리 수행하여 저장해두는 것을 말합니다. 보통 합계나 통계를 미리 계산해두는 집계컬럼도 동일한 목적을 가진 Calculated Column입니다. (우리가 잘 아는 Indexing도 Calculated Column과 동일한 목적으로 사용되는 것이라 합니다.)
그래서 특정 컬럼을 소문자로 저장해두는 이유는 무엇일까요? 바로 Non case-sentitive 검색비용을 줄여주기 위해 생성된 것입니다. SQL Server와 같은 Non case sentitive DB에서는 특별한 이점이 없지만, Informix와 같은 case-sentitive DB에서는 non case-sentitive 검색을 위해 lower() 메서드를 사용해야 하며 이는 Query비용을 증가시키기 때문에 미리 Lowered* Column을 계산해 두는 것이라 합니다.
ASP.NET Membership Table에서 UserName, Email, ApplicationName만 소문자로 저장해두는 이유는 이러한 Column들은 Non case-sentitive 검색에 자주 이용되며, CUD작업보다 검색이 빈번한 컬럼이며, Table크기가 커서 검색비용이 크다고 판단했기 때문에 검색비용을 줄일 수 있도록 미리 Lowered* Column으로 만들어 두는 것이라 합니다.
요약: non case-sentitive 검색이 필요한 경우에 쓰면 됩니다.
'Database' 카테고리의 다른 글
[DB] c#으로 SQLite 연결하기 (0) | 2015.07.25 |
---|---|
[DB] MS Sql Standard, Express, LocalDB, Compact (0) | 2015.07.23 |
[DB] Local DB 사용 시 ReadOnly 문제 해결 (1) | 2014.03.24 |
[DB] SQL Azure에 aspnet_regsql을 통해 Membersip Table 생성하기 (0) | 2014.03.24 |
[DB] Datetime, Smalldatetime and DateTime2 (0) | 2013.02.22 |