sql один конкретный размер таблицы и статистика - PullRequest
0 голосов
/ 10 мая 2018

у меня есть этот прекрасный рабочий запрос для определения размер, количество строк, без записей, всего в мегабайтах дБ ..

это mssql

Дело в том, есть ли способ изменить это так, чтобы он запрашивал только одну конкретную таблицу в БД? большое спасибо. также любые советы о том, как я могу запросить больше статистики? спасибо

USE [mydbname] 
GO
SELECT
s.Name AS SchemaName,
t.Name AS TableName,
p.rows AS RowCounts,
CAST(ROUND((SUM(a.used_pages) / 128.00), 2) AS NUMERIC(36, 2)) AS Used_MB,
CAST(ROUND((SUM(a.total_pages) - SUM(a.used_pages)) / 128.00, 2) AS NUMERIC(36, 2)) AS Unused_MB,
CAST(ROUND((SUM(a.total_pages) / 128.00), 2) AS NUMERIC(36, 2)) AS Total_MB
FROM sys.tables t
INNER JOIN sys.indexes i ON t.OBJECT_ID = i.object_id
INNER JOIN sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
INNER JOIN sys.allocation_units a ON p.partition_id = a.container_id
INNER JOIN sys.schemas s ON t.schema_id = s.schema_id
GROUP BY t.Name, s.Name, p.Rows
ORDER BY s.Name, t.Name
GO

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

хорошо, наконец, решение.

USE db_name
GO 

SELECT
  t.name                                       AS TableName,
  s.name                                       AS SchemaName,
  p.rows                                       AS RowCounts,
  SUM(a.total_pages) * 8                       AS TotalSpaceKB,
  SUM(a.used_pages) * 8                        AS UsedSpaceKB,
  (SUM(a.total_pages) - SUM(a.used_pages)) * 8 AS UnusedSpaceKB
FROM
  sys.tables t
  INNER JOIN sys.indexes i ON t.object_id = i.object_id
  INNER JOIN sys.partitions p ON i.object_id = p.object_id AND i.index_id = p.index_id
  INNER JOIN sys.allocation_units a ON p.partition_id = a.container_id
  LEFT OUTER JOIN sys.schemas s ON t.schema_id = s.schema_id
WHERE
    t.name = 'table_name'
  AND t.is_ms_shipped = 0
  AND i.object_id > 255
GROUP BY
  t.name, s.name, p.rows
ORDER BY
  t.name;
GO
0 голосов
/ 10 мая 2018

Вы должны просто добавить условие where:

WHERE t.Name = 'TABLE_NAME_GOES_HERE'

А если у вас одинаковые таблицы в разных схемах

WHERE t.Name = 'TABLE_NAME_GOES_HERE' and s.Name = 'SCHEMA_NAME_GOES_HERE'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...