내가에있는 경우 :이이 때마다 데이터베이스에 충돌합니까?
config/initializers/foobar.rb
: 내 응용 프로그램에서
$foos = User.where(:foo => true).pluck(:id)
을 내가 $foo
를 호출 할 때, 그것은 DB를 매번 충돌합니까?
$foo
은 서버 시작시에만 db에 도달하나요?
내가에있는 경우 :이이 때마다 데이터베이스에 충돌합니까?
config/initializers/foobar.rb
: 내 응용 프로그램에서
$foos = User.where(:foo => true).pluck(:id)
을 내가 $foo
를 호출 할 때, 그것은 DB를 매번 충돌합니까?
$foo
은 서버 시작시에만 db에 도달하나요?
범위 (즉, 일련의 기준)를 저장하고 있습니다. 그러나 해당 범위는로드 한 내용을 캐시하므로 예를 들어 $foos.each {|user| ...}
은 첫 번째 사용 시점 (할당되지 않은 경우)에서 한 번만 쿼리를 실행합니다.
일부 작업은 항상 쿼리를 트리거합니다. 예를 들어 $foos.count
은 항상 select count(*)...
을 수행하고 나머지는 범위가로드되었는지 여부에 따라 달라집니다.
마지막으로, 그 범위에 대한 추가적인 개선은 또한 새 쿼리 그것을 사용할 때마다 발생하게 예를
$foos.order('blah').first
를 들어, DB를 칠 것이다. irb : irb 호출을 테스트 할 때 범위가로드되는 식의 결과를 검사 할 때 조심해야하지만 이것이 일어나는지 여부를 쉽게 알 수 있어야합니다.
$foos
은 변수 일 뿐이므로 할당 된 데이터베이스에만 적용됩니다.