如何使用限制来计算MySQL或PostgreSQL中的表大小? 例如: WHERE organisation_id=1
答案 0 :(得分:2)
在PostgreSQL中你不能。数据存储在块中(每个块通常为8kb),您不知道在哪个块中存储了“organisation_id = 1”的记录。当所有记录都在一个块中时,它是8kb。当100个记录存储在100个块中时,它是800kb,但也包括其他记录。
你可以用隐藏的列“ctid”做一些魔术,但这是很多工作,不准确,也不是很有用。只需使用pg_relation_size()来获取整个表,这就是您所需要的。如果需要TOAST表包含,请使用pg_total_relation_size()。
答案 1 :(得分:2)
ModelName.count(:conditions => {:organisation_id => 1})
答案 2 :(得分:1)
如果您在模型中设置了如下关联:
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,这种事情与数据库无关。
答案 3 :(得分:1)
这取决于您的表结构。如果你有所有固定宽度的字段,你可以非常接近。如果你有可变宽度字段,你将做的最好的是估计。这是为了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
答案 4 :(得分:0)
更短的版本
ModelName.count(:organisation_id => 1)