Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何使用条件计算表的大小_Mysql_Ruby On Rails_Postgresql - Fatal编程技术网

Mysql 如何使用条件计算表的大小

Mysql 如何使用条件计算表的大小,mysql,ruby-on-rails,postgresql,Mysql,Ruby On Rails,Postgresql,如何使用限制计算MySQL或PosgreSQL中的表大小?例如:其中Organization_id=1如果您的模型中设置了如下关联: class Organisation < ActiveRecord::Base has_many :members end class Member < ActiveRecord::Base belongs_to :organisation end 多亏了ActiveRecord,这种功能与数据库无关。如果您在模型中设置了如下关联: cla

如何使用限制计算MySQL或PosgreSQL中的表大小?例如:
其中Organization_id=1

如果您的模型中设置了如下关联:

class Organisation < ActiveRecord::Base
  has_many :members
end

class Member < ActiveRecord::Base
  belongs_to :organisation
end

多亏了ActiveRecord,这种功能与数据库无关。

如果您在模型中设置了如下关联:

class Organisation < ActiveRecord::Base
  has_many :members
end

class Member < ActiveRecord::Base
  belongs_to :organisation
end

多亏了ActiveRecord,这种东西是独立于数据库的。

在PostgreSQL中你不能。数据存储在块中(通常每个块8kb),您不知道“Organization_id=1”的记录存储在哪个块中。当所有记录都在一个块中时,它是8kb。当100条记录存储在100个块中时,它是800kb,但也包括其他记录


你可以用隐藏的列“ctid”来做一些魔术,但是这需要做很多工作,不准确,也不是很有用。只需使用pg_relation_size()获取整个表,这就是您所需要的。如果您需要TOAST表包含,请使用pg_total_relation_size()。

在PostgreSQL中,您不能使用。数据存储在块中(通常每个块8kb),您不知道“Organization_id=1”的记录存储在哪个块中。当所有记录都在一个块中时,它是8kb。当100条记录存储在100个块中时,它是800kb,但也包括其他记录

你可以用隐藏的列“ctid”来做一些魔术,但是这需要做很多工作,不准确,也不是很有用。只需使用pg_relation_size()获取整个表,这就是您所需要的。如果您需要TOAST表包含,请使用pg_total_relation_size()。

甚至更短的版本

ModelName.count(:organisation_id => 1)
更简短的版本

ModelName.count(:organisation_id => 1)

这取决于你的桌子结构。如果你有所有固定宽度的字段,你可以非常接近。如果您有可变宽度字段,那么最好是进行估计。这是为博士后准备的

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

这取决于你的桌子结构。如果你有所有固定宽度的字段,你可以非常接近。如果您有可变宽度字段,那么最好是进行估计。这是为博士后准备的

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

计数方法将非常有用faster@fl00r:这是计数法。加载
organization
后,它会执行与我的示例相同的操作。klew,你说得对。我把长度和尺寸的方法弄混了。这种方法会更有效faster@fl00r:这是计数法。加载
organization
后,它会执行与我的示例相同的操作。klew,你说得对。我混合了长度和大小方法。我认为这可能是一个简单的解决方案,然后我可以乘以每列所需的字节数。嗯,我怀疑我的答案是错误的。它没有给出表的大小,但是它计算表中的行数。但是
conditional_table_size=rows*row_size
@Randolpho:但是文本和blob字段会有问题吗?我认为这可能是一个简单的解决方案,然后我可以乘以每个列所需的字节数,我怀疑我的答案是错误的。它没有给出表的大小,但是它计算表中的行数。但是
conditional_table_size=rows*row_size
@Randolpho:但是文本和blob字段会有问题吗?