Можно ли получить объем пространства на диске, который использует конкретная таблица? Допустим, в моей таблице хранится миллион пользователей, и я хочу знать, сколько места требуется для хранения всех пользователей и / или одного из них.

< Сильный > Обновление :

Я планирую использовать Redis для кэширования некоторых полей из одной конкретной таблицы в памяти, чтобы быстро получить необходимые данные после. Поэтому мне нужно посчитать, сколько примерно места он займет и, следовательно, уместится в памяти или нет. Определенно, это зависит от типов данных, которые я использую в своей таблице, но если таблица состоит из нескольких десятков полей, для подсчета этого по одному потребуется слишком много времени.

Для MySQL есть именно такой ответ, хотя он не подходит для SQL Server: Как определить, сколько места на диске занимает конкретная таблица MySQL? вверх? Вы можете проверить это, чтобы понять, что я имею в виду.

0
Ivan Yurchenko 19 Окт 2017 в 19:37

3 ответа

Лучший ответ

Если у вас есть SSMS, вы можете щелкнуть правой кнопкой мыши по таблице в Обозревателе объектов, перейти в Свойства, а затем просмотреть страницу Хранилище. Поле «Пространство данных» - это размер данных в этой таблице, но оно, вероятно, не включает некоторые накладные расходы таблицы.

2
zambonee 19 Окт 2017 в 17:10

Нам нужно увидеть полную схему вашей базы данных с таблицами и столбцами и типами данных всех полей. Без этой информации это просто удачное предположение. Вот полезная таблица размеров каждого типа данных: https : //www.connectionstrings.com/sql-server-2012-data-types-reference/

Тогда вам просто нужно выполнить математику и рассчитать пространство, необходимое для X, которое является вашим количеством записей

0
Moseleyi 19 Окт 2017 в 16:42

Это действительно расширенный комментарий, потому что он не дает прямого ответа на вопрос.

В большинстве случаев вы просто используете размер столбцов, складываете их вместе и умножаете на количество строк. Это занижает оценку, но это разумно. И (в зависимости от того, как вы обрабатываете типы) может быть разумной оценкой размера экспорта данных.

Тем не менее, хранение таблиц является сложным вопросом. Вот некоторые из факторов, которые вы должны принять во внимание:

  • Размер отдельных полей. Это немного усложняется, потому что некоторые типы имеют разные размеры, поэтому они полностью зависят от данных.
  • Количество страниц, занимаемых таблицей (или эквивалентно тому, насколько полна каждая страница данных). Обратите внимание, что это может варьироваться в зависимости от того, насколько полна каждая таблица.
  • Количество страниц, занимаемых типами данных «переполнение», например varchar(max).
  • Являются ли страницы данных сжатыми или зашифрованными.
  • Индексы для таблицы.
  • Насколько полна каждая страница индекса.

И, без сомнения, я пропустил кучу других соответствующих внутренних деталей (здесь - это место, где можно начинать с макетов страниц).

Другими словами, нет простого ответа. Эквивалентные таблицы в двух разных системах могут занимать очень разные места. Это верно для «одной и той же» таблицы в одной и той же системе в разное время.

Общий ответ при работе с базами данных заключается в том, что вам нужно гораздо больше места, чем количество строк * размер строки - я, кажется, вспоминаю использование коэффициента 3 в один момент времени. В целом, хранилище довольно дешевое, так что это не является ограничивающим фактором при использовании базы данных.

1
Gordon Linoff 19 Окт 2017 в 16:50