名前が何らかのトークンであるすべてのレコードを検索する Rails ActiveRecord クエリがあります。
records = Market.where("lower(name) = ?", name.downcase );
rec = records.first;
count = records.count;
サーバーは、 と の呼び出しの.first
両方.count
がデータベースにヒットしたことを示しています。
←[1m←[35mCACHE (0.0ms)←[0m SELECT "markets".* FROM "markets" WHERE (lower(nam
e) = 'my market') LIMIT 1
←[1m←[36mCACHE (0.0ms)←[0m ←[1mSELECT COUNT(*) FROM "markets" WHERE (lower(na
me) = 'my market')←[0m
すでにクエリされた結果を使用できるのに、データベースにアクセスしてカウントを取得するのはなぜですか?
今後の活躍が気になります。現在、1000 件のレコードがあります。そのテーブルが 800 万行を保持し、1 つはデータ用、もう 1 つはカウント用の 2 つのクエリを実行すると、コストが高くなります。
データベースではなくコレクションからカウントを取得するにはどうすればよいですか?