2016-07-29 2 views
0

Je veux accélérer ma requête, je n'ai fait aucun index sur mes tables.Une gemme agit comme `balle` qui peut détecter automatiquement les performances de votre requête et vous suggérer d'ajouter un index sur certaines colonnes spécifiques

Mais je n'ai aucune idée où je devrais mettre l'index au bon endroit.

Contrôleur

def search 
    @rooms = Room.includes(:hotel, :skus).where(id: available_rooms_ids) 
    end 

constructeur JSON

Mon constructeur JSON est un peu complexe.

Les enfants doivent extraire leurs données parentes.

Le brevet doit également récupérer ses données enfants.

Leur chaîne relation ressemble

  • Hôtel has_many Chambre
  • Chambre has_many RoomSku
  • RoomSku has_many STOCK

CODE

json.array!(@rooms) do |item| 
    json.merge! item.attributes 
    json.hotel item.hotel 
    json.room_skus do 
     json.array! item.skus do |sku| 
     next if (sku.date < @check_in_time.to_date or sku.date > @check_out_time.to_date) 
     json.merge! sku.attributes.merge({stock:sku.stock}) 
     end 
    end 
    json.img_src_url item.hotel.images.last.src.url 
    end 
    end 

Répondre

1

Vous pouvez utiliser quelque chose comme pg_idx_advisor pour savoir de quels index votre base de données a besoin et ensuite écrire une migration qui va créer de tels index.