많은 양의 데이터 (대부분 텍스트가 8 천 2 백 65 만 행, 총 8Gb)가있는 SQL Server 데이터베이스가 있습니다. 데이터는 주당 한 번만 변경됩니다. 여러 조건을 만족하는 행 수를 계산하는이 데이터에 대해 여러 SQL 쿼리를 실행하는 ASP.NET 웹 응용 프로그램이 있습니다. 데이터가 일주일에 한 번만 변경되기 때문에 일주일 동안 SQL 쿼리와 카운트 모두를 저장하는 가장 효율적인 방법은 무엇입니까? 데이터베이스 또는 응용 프로그램에 저장해야합니까?대용량 SQL 데이터의 쿼리 및 개수를 저장하는 가장 효율적인 방법
답변
데이터가 일주일에 한 번 수정되는 경우 (ETL?) 프로세스의 일부 및 끝 부분에서 "기본"개수를 수행하고 결과를 데이터베이스의 테이블에 저장하십시오. 그런 다음, 큰 테이블에 대한 긴 쿼리가 아닌, 그 작은 요약 테이블을 쿼리 할 수 있습니다.
쿼리는 복잡성에 따라 저장 프로 시저 또는 뷰로 저장해야합니다.
상황에 내가 indexed views.
로 보일 것이다 그들은 당신이 두 쿼리와 달리 인덱싱 할 수 없습니다 집계와 같은 것들에 대한 결과 집합을 저장할 수 있습니다.
보너스로 쿼리 최적화 프로그램에도이 데이터가 있다는 것을 "알고 있습니다". 따라서 다른 쿼리 (심지어 뷰를 직접 참조하지 않는 쿼리 포함)의 뷰 인덱스에 저장된 수나 다른 값을 확인하면 여전히 저장된 데이터를 사용합니다.
인덱싱 된 뷰 수 매우 유용하지만, 나는이 상황에서 그들이 과잉이라고 생각한다. –
@Mitch - 아마도. 그는 이러한 집계를 확인해야하는 빈도 나 개수가 얼마나되는지, 결과에 얼마나 많은 쿼리 활동이 있는지에 대해서는 말하지 않습니다. – JNK
당신이, 당신은 SQL 서버의 내부 정보를 조회 할 수있는 최신의 정확한 행 카운트 100 %가 필요하지 않은 경우 :
Select so.name as 'TableName', si.rowcnt as 'RowCount'
from sysobjects so
inner join sysindexes si on so.id = si.id
where so.type = 'u' and indid < 2
매우 실행할 신속하고 필요한 별도의 테이블. 많은 업데이트가 발생하는 곳에서는 정확하지 않지만 일 경우은 의도 한 용도로 충분히 정확할 수 있습니다. (여전히 빠른 인해 합계 느리지 만) 파고의 비트를했고이 정확한 카운트를 생산 않습니다 :
업데이트 [! 덧글에 감사드립니다]
SELECT OBJECT_SCHEMA_NAME(ps.object_id) AS SchemaName,
OBJECT_NAME(ps.object_id) AS ObjectName,
SUM(ps.row_count) AS row_count
FROM sys.dm_db_partition_stats ps
JOIN sys.indexes i ON i.object_id = ps.object_id
AND i.index_id = ps.index_id
WHERE i.type_desc IN ('CLUSTERED','HEAP')
AND OBJECT_SCHEMA_NAME(ps.object_id) <> 'sys'
GROUP BY ps.object_id
ORDER BY OBJECT_NAME(ps.object_id), OBJECT_SCHEMA_NAME(ps.object_id)
Ref.
저장된 카운트 정보는 항상 100 % 2005에서 만든 새 테이블에 대한 SQL Server 2000에서 정확한 카운트가 정확 될 것을 기억하십시오. 그러나 2000 년에 존재하고 이제 테이블이 복원 또는 업데이트를 통해 2005에 상주하는 경우 (2005 년 이동 후 한 번만 실행해야 함) sp_spaceused @updateusage = N'true '또는 COUNT_ROWS가있는 DBCC UPDATEUSAGE 선택권.
- 1. 개체의보기 개수를 저장하는 효율적인 방법은 무엇입니까?
- 2. 데이터베이스에 지오 코딩을 저장하는 가장 효율적인 방법
- 3. MySQL에서 IP 주소를 저장하는 가장 효율적인 방법
- 4. 대용량 파일을위한 효율적인 인라인 검색 및 대체
- 5. 효율적인 SQL 쿼리
- 6. 효율적인 SQL 쿼리
- 7. ASP.NET의 HttpResponse에 대용량 파일을 작성하는 가장 효율적인 방법
- 8. SQL Server 2005 IMAGE 열에 20MB 파일을 저장하는 가장 효율적인 방법
- 9. 페이징 및 대용량 SQL 서버 테이블
- 10. SQL Server에 많은 문자열 메시지를 저장하는 가장 효율적인 방법은 무엇입니까?
- 11. 대용량 데이터 (C# ASP.net)를 저장하는 가장 빠른 방법
- 12. 대용량 쿼리 증가 TempDB
- 13. 안드로이드에 이미지를 저장하는 효율적인 방법
- 14. 아이소 메트릭 게임의 타일 데이터를 저장하는 가장 효율적인 방법
- 15. 이진 이미지 데이터의 효율적인 저장
- 16. MySQL을 MySQL에 저장하는 가장 효율적인 방법은 무엇입니까?
- 17. 분석 비컨을 저장하는 가장 효율적인 방법은 무엇입니까?
- 18. 레일 : 세션을 저장하는 가장 효율적인 방법은 무엇입니까?
- 19. 복소수와 정수의 혼합 된 컬렉션을 저장하는 가장 효율적인 방법
- 20. 저장하는 대용량 데이터는
- 21. C# 반환 된 데이터의 크기 및 SQL 쿼리
- 22. 2 가지 프로세스간에 대용량 데이터를 교환하는 가장 효율적인 방법은 무엇입니까?
- 23. 배열에 mysql 데이터의 행/열을 저장하는 방법
- 24. 가장 효율적인 방법 (두 가지 방법)
- 25. 대용량 데이터의 경우 스프레드 시트가 손상됩니다.
- 26. PNG를 HTTP 응답으로 생성하는 가장 효율적인 방법
- 27. 대용량 쿼리 지연로드
- 28. 큐를 모니터링하는 가장 효율적인 방법
- 29. 링크 테스트를위한 가장 효율적인 방법
- 30. Ruby에서 가장 효율적인 입력 방법
BTW, 총 6500 만 행과 8GB의 총 크기가 실제로 큰 것은 아닙니다 ... –
MS SQL Server는 구체화 된보기를 지원합니까? 그것은 하나의 아이디어 일 것입니다. (빠른 검색을 수행하고 [this] (http://stackoverflow.com/questions/1527141/how-to-mimick-oracle-materialized-views-on-ms-sql-server)를 찾았습니다.) – bart