문제

하나의 테이블이있는 SQL 모바일 데이터베이스가 있습니다. 유용하고 종종 쿼리 된 데이터가있는 여러 열과 자주 쿼리되지 않는 레코드 당 비교적 큰 문자열 (1000 개 이상)을 저장하는 하나의 열이 있습니다.

이 가짜 스키마 인 "Lifestory"필드가 큰 스키마를 상상해보십시오.

table1
String firstName
String lastName
String address
String lifeStory

대표 쿼리가 될 것입니다

SELECT firstName, lastName, address FROM table1 WHERE firstName = :p1

이 테이블에서 그 크고 쿼리 된 열을 남기는 성능 문제에 대해 아는 사람이 있습니까?

도움이 되었습니까?

해결책

VS2005 (C#) 및 SQLSERVERCE 라이브러리 사용 하다 성능에 영향을 미치지 만 진정으로 대답 할 수는 없습니다 왜. 또한 실제로 열 자체가 아닌 성능에 부정적인 영향을 미치는 것은 해당 열의 데이터 길이입니다.

일을위한 프로젝트에서 나 자신의 성능 테스트를 수행하면 한 번의 추가 열만 비슷한 시나리오에 달려있었습니다.

table1

c1 NVARCHAR (20)
c2 NVARCHAR (20)
c3 NVARCHAR (20)
c4 NVARCHAR (20) 
c5 NVARCHAR (4000) //maximum allowed and fully populated for testing purposes

당신이 달리면 ...

select c1, c2, c3, c4 From table1

... 약 1560 밀리 초가 걸립니다.

두 개의 테이블을 만들고 큰 열을 끌어 내고 (자연스럽게 두 개를 관련시키기위한 외국 키를 제공하고) 첫 번째 테이블에서 동일한 쿼리를 실행하면 약 660 밀리 초가 걸립니다.

마지막으로, 다른 테스트에서는 열의 수가 아니라 각 행의 데이터 크기라는 것을 보여주었습니다. IE 5 열, 2 Chars wide == 2 열, 5 개의 chars 너비. 또한 모바일 장치에서이를 실행하십시오. 당신은 이것을 테스트 할 수 있지만 내 PC의 마력이 상당히 높기 때문에 타이밍 차이는 위에서 설명한 거의 1000 밀리 초가 아닌 10-20 밀리 초인 것으로 나타났습니다.

왜요? 이것은 단지 추측이지만 ...

모바일 세계에서 DBM은 동일 할 수 없습니다. 엔터프라이즈 데이터베이스가 아닙니다. 표지 아래에서 나는 여전히 OLEDB를 "SEEKS"를 수행하고 있다고 확신합니다.

전반적으로, 모바일 공간에서 나는 DB가 가장 "정규화 된"것이 아니라 가장 빈번한 사용 사례를 지원하는 것을 배웠습니다. 행운을 빕니다!

다른 팁

해당 필드의 데이터를 실제로 보거나 쿼리하려고하지 않는 한 성능 처벌을 알지 못해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top