Ruby on rails 为什么User.first第一次查询数据库要花更多的时间?
当我打开现有应用程序的控制台并键入:Ruby on rails 为什么User.first第一次查询数据库要花更多的时间?,ruby-on-rails,ruby,rails-console,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
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查询数据库所花费的时间之间的差异。类似于控制台中可用的缓存。这在运行的应用程序中是如何表现的。它是否需要更多的时间甚至缓存,具体在哪里执行。数据库服务器将查询缓存在查询缓存中 有关mysql数据库查询缓存的文档,请参见此处: ActiveRecord还执行查询缓存:
这两种情况都可能发生,具体取决于您的系统配置。数据库服务器将查询缓存在查询缓存中 有关mysql数据库查询缓存的文档,请参见此处: ActiveRecord还执行查询缓存:
这两种情况都可能发生,具体取决于您的系统配置。如果您使用的是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)
因此,最初的查询是建立数据库连接。之后的用户将使用其他答案中提到的缓存并已建立连接。如果您使用的是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)
因此,最初的查询是建立数据库连接。之后的用户将使用其他答案中提到的缓存和已建立的连接。以及较低级别的缓存,如mysql innodb缓冲池等、表定义缓存等,以及较低级别的缓存,如mysql innodb缓冲池等、表定义缓存等。