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
只返回行数<代码>选择*将返回行(及其所有列)本身。