Как я могу рассчитать размер таблицы, используя условие - PullRequest
0 голосов
/ 30 марта 2010

Как подсчитать размер таблицы в MySQL или PosgreSQL, используя ограничение? например: WHERE organisation_id=1

Ответы [ 5 ]

2 голосов
/ 30 марта 2010

В PostgreSQL вы не можете. Данные хранятся в блоках (обычно по 8 КБ каждый), и вы не знаете, в каком блоке хранятся записи с "organisation_id = 1". Когда все записи в одном блоке, это 8 КБ. Когда 100 записей хранятся в 100 блоках, это 800 КБ, но это касается и других записей.

Вы могли бы творить чудеса со скрытым столбцом "ctid", но это большая работа, не точная и не очень полезная. Просто используйте pg_relation_size (), чтобы получить всю таблицу, это то, что вам нужно. Если вам нужны включения в TOAST-таблицу, используйте pg_total_relation_size ().

2 голосов
/ 30 марта 2010
ModelName.count(:conditions => {:organisation_id => 1})
1 голос
/ 01 апреля 2010

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

SELECT  pg_total_relation_size('my_table') * i / cnt
FROM (
  SELECT SUM(CASE WHEN organization_id = 1 THEN 1 ELSE 0 END) AS i,
  COUNT(1) AS cnt
  FROM my_table
) sub
1 голос
/ 30 марта 2010

Если в ваших моделях установлены ассоциации следующим образом:

class Organisation < ActiveRecord::Base
  has_many :members
end

class Member < ActiveRecord::Base
  belongs_to :organisation
end

тогда вы можете узнать, сколько членов в организации 1, с помощью следующего:

organisation = Organisation.find(1)
n_members = organisation.members.size

Благодаря ActiveRecord такие вещи не зависят от базы данных.

0 голосов
/ 31 марта 2010

Еще более короткая версия

ModelName.count(:organisation_id => 1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...