저는 SQL Server를 처음 사용하기 때문에이 큰 테이블을 사용하여이 문제가 발생했습니다.이 테이블은 다소 어색한 방법으로 구현되었습니다. 여기에 디자인이SQL Server의 열에서 값 검색 최적화
표 우리는 필드의 일부가되는과의 거래의 기록이 테이블 A로 진행되는
itemID uniqueidentifier PK
name vchar(32)
datecreated datetime
dateprocessed datetime
datereviewed datetime
approvalstatus int
workflowstatus int
표 B
fieldID uniqueidentifier PK
itemID uniqueidentifier FK(referencing table A's itemID)
name vchar(32)
value vchar(32)
모양을 요약 사진입니다 테이블 A에있는 트랜잭션에 대해 AccountNumber
이라고 말한 것과 같이, name = accountnumber 및 value = '[실제 계정 번호]'인 테이블 B에 필수 i가있는 채로 채워집니다 temid. 이제 테이블 B는 매우 커서 뷰를 사용하는 특정 트랜잭션에 대한 계정 번호 쿼리가 영원히 필요합니다.
이 모든 이름 열은 이전에 표 A에 있었지만 항상 변경되어야하는 비즈니스 요구 사항으로 인해 더 많은 열을 추가해야 팀이이 방법으로 구조를 만들었고 새로운 필드를 추가하면 표 A에 새 열을 추가 할 필요가 없었습니다.
이 표를 최적화하는 가장 좋은 방법은 무엇입니까?
자세한 정보를 추가하십시오. 특히 정보를 최적화하는 데는이 정도의 정보를 제공하는 것이 좋습니다. 예 :나는 "accountnumber"와 "transaction"또는 그들의 값 anywere을 보지 못한다. 왜 나는 당신이 테이블 B에서 "실제 계좌 번호"를 찾아야하는지 알지 못한다 - 당신이 간행 한 정보에서 그것은 간단한 'insert 'command ... –
@market 테이블 A는 남은 필드가 테이블 B에 삽입되는 이유 중 일부입니다. 테이블 b는 이제 매우 커서 테이블 B에 삽입 된 다른 필드를 기반으로 검색하는 데 영원히 걸립니다 테이블 B에 삽입 된 일부 필드의 이름 값이 2 인 테이블을 깨는 것 같습니다. – kolexinfos
입니다. 이 경우,이 모델을 유지함으로써 "고품질 최적화"를 수행 할 수 없습니다. 당신이해야 할 일은 DB (유일한 좋은 해결책이 될 것입니다)를 재 설계하거나 "빠져 나오기"에 빠르거나 더러운 것입니다 : EAV 테이블에 정의 된 ID 인 tableB에 새로운 키 필드를 도입하여 [name ] 필드의 "유형". 따라서 EAV는 "AccountNumber = 1, Transaction = 2, etc."와 같습니다. 이렇게하면 TableB에서 검색을 시작하기 전에 많은 레코드를 필터링 할 수 있습니다. –