Количество данных в базе данных для определенного поля (столбца) - PullRequest
1 голос
/ 23 января 2012

Можно ли получить информацию о количестве данных в одном поле (столбце) в mysql или любом другом БД?

Ответы [ 2 ]

2 голосов
/ 24 января 2012

Фактические требования к дисковому пространству столбца для всей таблицы , как правило, трудно определить. Это зависит от ряда факторов.

О PostgreSQL в частности

  • Одним из таких факторов является выравнивание данных. Я написал больше об этом в связанном ответе .

  • Еще один - сжатие. Текст, длина которого превышает несколько десятков байт, будет тостом . То есть сжат и хранится в отдельной таблице TOAST.

  • Индексы увеличивают общее пространство.

Ответить примером

Для этой цели я использую реальную таблицу с 21k мест с именем location. В нем 20 столбцов, но name самый большой. Чтобы продемонстрировать накладные расходы, которые несет таблица, я создал временную таблицу с одним столбцом name в дополнение. (Накладные расходы для временной таблицы в основном такие же, как и для простой таблицы - я проверял.)

CREATE TEMP TABLE x AS SELECT name FROM location;

Затем я использовал некоторые функции PostgreSQL размера объекта базы данных для создания этой демонстрации:

SELECT pg_size_pretty(pg_table_size('loc'::regclass)) AS tbl_size
      ,pg_size_pretty(pg_relation_size('loc'::regclass)) AS rel_size
      ,(SELECT pg_size_pretty(sum(pg_column_size(loc))) from loc) AS sum_col_size

      ,pg_size_pretty(pg_table_size('x'::regclass)) AS tbl_size
      ,pg_size_pretty(pg_relation_size('x'::regclass)) AS rel_size
      ,(SELECT pg_size_pretty(sum(pg_column_size(loc))) from x) AS sum_col_size

Результат:

tbl_size | rel_size | sum_col_size | x_tbl_size | x_rel_size | x_sum_col_size
---------+----------+--------------+------------+------------+---------------
3160 kB  | 3128 kB  | 432 kB       | 1104 kB    | 1096 kB    | 432 kB

Но, может быть, я перевернул вопрос, и вам нужен только объем хранилища для базовых типов данных? Это указано в каждой главе в прекрасном руководстве здесь .

0 голосов
/ 24 января 2012

Если это тип varchar, это скажет вам количество байтов, используемых столбцом:

select sum(length(column_name)) + count(*) as total_bytes from table_name;

Для varchar вы добавляете 1 байт на строку (т.е. добавляете count(*)).

Если это char, просто умножьте количество (*) на ширину столбца.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...