최대 속도에 맞게 최적화해야하는 데이터베이스를 설계하고 있습니다.최대 속도의 SQL Server 데이터 형식 선택
모든 데이터베이스 데이터는 입력 데이터베이스 (내가 편집중인 데이터, 주로 일부 폴리 라인, 마커 등)를 Google지도에서 호출하는 것으로부터 한 번 생성됩니다.
데이터베이스는 편집 대상이 아니지만 결과를 사용자에게 신속하게 표시 할 수있는 최대한 많은 데이터 (도시, 사용자 지정 폴리 라인 등의 경로)를 유지해야합니다.
질문 : 작은 데이터 형식을 int와 같은 smallint와 같이 선택하면 성능이 향상되거나 영향을 미칩니 까? 일부 빠른 계산 후에 공간은 문제가되지 않지만 데이터베이스는 200MB를 초과하지 않으며 100,000 개가 넘는 행이있는 테이블은 없습니다 (평균은 약 5.000).
인터넷에서 기사를 읽었으며 일부 데이터 유형이 성능을 향상 시키므로 다른 사람들이 그것이 추가 처리가 수행되어야하기 때문에 영향을 준다는 말 때문에 일부 질문을하고 있습니다. 더 작은 데이터베이스의 경우 결과가 눈에 띄지 않을 수 있지만, 많은 요청을 기대하기 때문에 모든 비트에 관심이 많다는 사실을 알고 있습니다.
호스팅 환경은 SQL Server 2008 R2가 설치된 Windows Server 2008 R2가 될 것입니다.
편집 1 : 그냥 나는 아직 적절한 테이블 구조가 없기 때문에 당신에게 예를 제공 : 을 나는 (곳 (200)의 주위에) 대중 교통 라인을 보유 할 테이블이거야, 식별 실제 생활에서 고유 한 숫자이며 모든 종류의 테이블에서 참조 될 것이며 모든 종류의 조작이 이루어질 것입니다. 이러한 참조 테이블은 가장 많은 양의 데이터를 보유합니다. 라인 고유 번호를 가지고 있기 때문에
가, 내가 디자인의 3 명 예의 생각 다음 PK는 데이터 형식의 행 번호입니다
을 smallint로 :
약동학은 데이터 형식의 행 번호는 다음과 같습니다 int
PK는 다른 것으로 (예 : ID) 행 번호가 다른 필드에 저장됩니다.
최적화의 대상이 아닌 '입력 데이터베이스'에서 사용 했으므로 PK는 GUID (16 바이트)입니다. 만약 당신이 좋아하면 정말
는 그래서 PK가 최소 15 개 테이블 중 일부에서 참조 될 것입니다 것을 명심 경우, 당신이 다른 사람과 비교하는 방법 나쁜 비교를 할 수 있습니다 50.000 개가 넘는 행 (나머지는 위에서 말했듯이 평균 5.000 개가됩니다)은 일정한 질의와 조작을 할 것이고, 나는 얻을 수있는 모든 속도에 관심이 있습니다.
필요한 경우 자세히 설명해 드릴 수 있습니다.감사합니다
편집 2 : 내가 네이티브 SQL 쿼리를 사용하는 경우
내가이 특정 시나리오에의 모든 성능 개선을 표시됩니다 그리고이 관련된 또 다른 문제는이 토론에 맞는 생각, 내 마음에 와서 내부에서 내 .NET 응용 프로그램 대신 LINQ를 사용하여 SQL? 나는 LINQ가 강력하게 최적화되어 있으며 성능 측면에서 좋은 쿼리를 생성하지만 여전히 가치가 있다고 생각합니다. 다시 한번 감사드립니다.
** 예! ** 올바른 데이터 유형을 선택하는 것이 디자인에서 중요합니다. 더 작은 데이터 유형은 뒤섞이는 필요가 적은 바이트와 같습니다 - 그래서 확실히 도움이 될 수 있습니다! 또한, "max"데이터 타입은 "일반적인"Varchar (n) 컬럼과는 다르게 처리된다. (성능에 부정적인 영향을 주지만, "VARCHAR (MAX) –
PK- 읽기 [GUID를 기본 및 클러스터링 키로] (http://www.sqlskills.com/BLOGS/KIMBERLY/post/GUIDs-as-PRIMARY-KEYs-andor-the-clustering-key.aspx) 그리고 [디스크 공간은 싸다 ... 그것은 중요하지 않다!] (http://www.sqlskills.com/BLOGS/KIMBERLY/post/Disk-space-is-cheap.aspx) Kimberly Tripp. GUID를 클러스터링 키로 사용하는 것은 ** 끔찍한 나쁜 생각입니다. 인덱스 조각화가 실제로 잘못되어 삽입, 업데이트, 삭제 및 선택 속도가 느려집니다. –
@marc_s 기사를 주셔서 감사합니다. 클러스터 인덱스에 대해 읽는 데 더 많은 시간을 할애 할 것입니다. 클러스터 인덱스가 무엇인지, 어떻게 작동하는지 잘 모르기 때문입니다. 어쨌든, 나는 GUID가 PK에 대한 나쁜 생각이라는 것을 알았지 만 지금은 왜 그리고 얼마나 나쁜지를 안다. 그러나 smallint 대 int는 어떨까요? 저수준 프로그래밍에 관해서는 완전히 무지하지만, smallint는 저장 공간이 덜 필요하지만 시간을 소비하는 추가 처리가 필요하다고 말하기도합니다. – Tiborg