2017-06-08 2 views
0

J'utilise le point final suivant pour voir quel est l'index étant choisi par cloudant pour aller chercher mes résultats:Cloudant Interrogation choisir le mauvais index

https://mydb.cloudant.com/mlslistings-temp/_explain 

et est ici une requête exemple pour lequel mauvais index est choisi:

{ 
"sort": ["ListPrice"], 
"limit":20, 
"selector":{ 
    "Street#":"1031", 
    "MLSStatus":{"$or":[{"$eq":"Active"}]}, 
    "ListPrice":{"$gte":0}, 
    "ParcelSizeAcres":{"$gte":0,"$lte":50}} 
} 

Tous les champs que vous voyez dans la requête sont des index basés json. J'ai deux questions concernant la sélection d'index:

  • Quel que soit le domaine que je mets comme le champ de tri se fait automatiquement sélectionné comme l'indice choisi. Cela aurait été bien, mais la plupart du temps ma requête va être "ListPrice":{"$gte":0} qui finit par faire un scan complet de la table puisque presque toutes les propriétés ont un prix supérieur à 0.
  • Si je supprime tous les champs de la requête et laisse juste Street# et ParcelSizeAcres dans la requête, ParcelSizeAcres est sélectionné comme index mais c'est faux. Parce que lorsque j'exécute la requête avec Street# un total de 53 documents sont renvoyés alors que ParcelSizeAcres renvoie des centaines.

Ces sélections d'indices semblent aller à l'encontre Cloudant's Explain Plans

Répondre

0

Tous vos index détiennent un seul champ. Donc, pour Cloudant, ils ont le même poids, et selon la documentation que vous mentionnez, le choix est alors le premier index disponible dans l'ordre de tri lexicographique, donc dans le premier cas, ListPrice et dans le second cas, ParcelSizeAcres. Cela semble cohérent avec le comportement documenté.