使用Rails 3.2。我正在重新审视problem I had earlier,这会影响性能,同时让附近的商店获取大量数据。
以下是原始代码:
# statement A
nearby_shops = current_shop.nearbys(10, :order => 'overall_rating DESC')
.where(:shop_type => shop_type).includes(:photos).limit(5)
我认为将其限制为5条记录需要加载 4000 + ms (数据库中有300,000条记录),但删除限制只需 20ms ,所以我的新代码是:
# statement B
nearby_shops = (current_shop.nearbys(10, :order => 'overall_rating DESC')
.where(:shop_type => shop_type).includes(:photos))[0..4]
语句B检查所有记录,但使用[0..4]
时,它仅返回5条记录。我选择不使用.limit(5)
或.first(5)
,因为这两个函数仍将返回到语句A中生成的相同SQL。
陈述A返回5条记录和5张相关照片,花在照片上的时间为10毫秒;
对帐单B返回100条记录和100张相关照片,花在照片上的时间为100毫秒。
如何将includes
张照片限制在前五张[0..4]
,以免不必要地包含其他95张照片?