Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.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
Rails activerecord User.first.followers.count和User.first.followers.to_a.count在概念上有什么区别?_Rails Activerecord_Railstutorial.org_Sqlite3 Ruby - Fatal编程技术网

Rails activerecord User.first.followers.count和User.first.followers.to_a.count在概念上有什么区别?

Rails activerecord User.first.followers.count和User.first.followers.to_a.count在概念上有什么区别?,rails-activerecord,railstutorial.org,sqlite3-ruby,Rails Activerecord,Railstutorial.org,Sqlite3 Ruby,两个活动记录查询:User.first.followers.count和User.first.followers.to_a.count分别计算以下SQL查询: [4] pry(main)> User.first.followers.count User Load (0.2ms) SELECT "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT ? [["LIMIT", 1]] (0.3ms) SELECT COUN

两个活动记录查询:
User.first.followers.count
User.first.followers.to_a.count
分别计算以下SQL查询:

[4] pry(main)> User.first.followers.count
  User Load (0.2ms)  SELECT  "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT ?  [["LIMIT", 1]]
   (0.3ms)  SELECT COUNT(*) FROM "users" INNER JOIN "relationships" ON "users"."id" = "relationships"."follower_id" WHERE "relationships"."followed_id" = ?  [["followed_id", 1]]
=> 4
[5] pry(main)> User.first.followers.to_a.count
  User Load (0.1ms)  SELECT  "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT ?  [["LIMIT", 1]]
  User Load (0.1ms)  SELECT "users".* FROM "users" INNER JOIN "relationships" ON "users"."id" = "relationships"."follower_id" WHERE "relationships"."followed_id" = ?  [["followed_id", 1]]
=> 4
它们在概念上有什么不同

这个问题是在本节末尾的练习题中提出的

他给出了以下提示:

提示:假设用户有一百万追随者


我想你不能说这是一个重大的区别。我们讨论的是响应时间为亚毫秒的单个数据点。请注意,第一个查询在两种情况下都是相同的,但在两个示例中分别需要0.2ms和0.1ms。您需要更广泛地进行基准测试。您可能测量了缓存效果。你需要做更多的重复,使用一个分辨率更好的计时器。谢谢你的评论,我发现时间可能会误导你。我知道这两个命令之间有某种区别,因为作者说有。但我不确定两者在概念上的区别是什么,所以我不确定要寻找什么。我知道在这两种情况下,我们都得到了一个项目集合的计数,但在第二种情况下,它是一个数组。在数据库级别上,这会产生某种影响,b/c sql命令不同,但我不确定文字上的区别是什么。
select count
只返回行数
select*
将返回行(及其所有列)本身。可能的重复我认为您不能称之为显著差异。我们讨论的是响应时间为亚毫秒的单个数据点。请注意,第一个查询在两种情况下都是相同的,但在两个示例中分别需要0.2ms和0.1ms。您需要更广泛地进行基准测试。您可能测量了缓存效果。你需要做更多的重复,使用一个分辨率更好的计时器。谢谢你的评论,我发现时间可能会误导你。我知道这两个命令之间有某种区别,因为作者说有。但我不确定两者在概念上的区别是什么,所以我不确定要寻找什么。我知道在这两种情况下,我们都得到了一个项目集合的计数,但在第二种情况下,它是一个数组。在数据库级别上,这会产生某种影响,b/c sql命令不同,但我不确定文字上的区别是什么。
select count
只返回行数<代码>选择*将返回行(及其所有列)本身。