테이블에서 가장 많은 공간을 차지하는 사용자 레코드를 찾으려고합니다. 이를 위해함수를 SqlServer에 사용하고 있습니다.DataLength 값의 합이 테이블 크기와 일치하지 않습니다.
SELECT
UserName,
SUM(
ISNULL(DATALENGTH(columnA), 1) +
ISNULL(DATALENGTH(columnB), 1) +
....
ISNULL(DATALENGTH(columnZ), 1) +
)/1000000 AS SizeInMegaBytes
FROM MyTable
GROUP BY UserName
ORDER BY SizeInMegaBytes DESC
결과 :
+----------+-----------------+
| UserName | SizeInMegaBytes |
+----------+-----------------+
| User1 | 1700 |
+----------+-----------------+
| User2 | 1504 |
+----------+-----------------+
| .... | .... |
+----------+-----------------+
| User75 | 20 |
+----------+-----------------+
전체 크기 = 1만6천5백23메가바이트
유일한 문제는 결과가 테이블의 크기와 일치하지 않는 것입니다.
+---------+-------+-------------+-------------+------------+-------------+
| name | rows | reserved | data | index_size | unused |
+---------+-------+-------------+-------------+------------+-------------+
| MyTable | 61477 | 59425416 KB | 42482152 KB | 62584 KB | 16880680 KB |
+---------+-------+-------------+-------------+------------+-------------+
저장 프로 시저가 아직 42기가바이트 등 총 데이터 크기의 모든 열 쇼의 쿼리를 보여줍니다 나는 테이블의 크기
sp_spaceused [MyTable]
결과를 얻기 위해 내장 된 저장 프로 시저를 사용 16 기가 바이트. 모든 열의 크기를 고려한 경우 추가 공간을 차지할 수 있습니까?
EDIT - 이전 질문과 달리 모든 그룹 레코드의 SUM
을 취하고 있기 때문에 내 문제가 언급 한 복제본과 같지 않다고 생각합니다. DataLength 함수의 SUM과 sp_spaceused
(29 GB)의 결과 사이에는 큰 불균형이있는 것 같습니다. 인덱스 나 헤더 정보만으로는 설명 할 수 없다고 생각합니다.
[sp \ _spaceused와 DataLength SQL Server의 차이점] (https://stackoverflow.com/questions/768320/difference-between-sp-spaceused-and-datalength-sql-server) – MarkD