为什么User.first第一次花更多时间查询数据库?

时间:2014-06-09 10:37:14

标签: ruby-on-rails ruby rails-console

当我打开现有应用程序的控制台并输入:

2.1.1 :001 > User.first
  User Load (17.6ms)  SELECT  "users".* FROM "users"   ORDER BY "users"."id" ASC LIMIT 1
=> #<User id: xxxx .... >

下次输入查询:

2.1.1 :002 > User.first
  User Load (0.8ms)  SELECT  "users".* FROM "users"   ORDER BY "users"."id" ASC LIMIT 1
=> #<User id: xxxx .... >

您可以看到rails查询数据库所用的时间之间的差异。是否可以在控制台中使用缓存。这在运行应用程序中的表现如何。它是否有更多的时间,甚至是缓存,它究竟是在做什么的。

2 个答案:

答案 0 :(得分:6)

数据库服务器在查询缓存中缓存查询。

有关mysql数据库查询缓存的文档,请参阅此处:https://dev.mysql.com/doc/refman/5.1/en/query-cache.html

ActiveRecord还执行查询缓存:

http://edgeguides.rubyonrails.org/caching_with_rails.html

这两种情况都可能发生,具体取决于您的系统配置。

答案 1 :(得分:1)

如果您正在使用rails 4,则不会立即建立数据库连接,直到您进行查询:

2.1.1 :001 > User
 => User(no database connection) 
2.1.1 :002 > User.first
User Load (28.8ms)
2.1.1 :003 > User.first
User Load (1.9ms)
2.1.1 :004 > User.last
User Load (2.8ms)

因此,初始查询是建立数据库连接。然后使用缓存(如其他答案中所述)并已建立连接。