Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.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
Ruby on rails 为什么User.first第一次查询数据库要花更多的时间?_Ruby On Rails_Ruby_Rails Console - Fatal编程技术网

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缓冲池等、表定义缓存等。