sql >> Databasteknik >  >> NoSQL >> MongoDB

Vad är det korrekta sättet att indexera i MongoDB när stora kombinationer av fält finns

I allmänhet är index bara användbara om de är över en selektiv fält. Det betyder att antalet dokument som har ett visst värde är litet i förhållande till det totala antalet dokument.

Vad "liten" betyder varierar på datamängden och frågan. En selektivitet på 1 % är ganska säker när man avgör om ett index är vettigt. Om ett visst värde finns i, till exempel, 10 % av dokumenten, kan det vara mer effektivt att utföra en tabellskanning än att använda ett index över respektive fält.

Med det i åtanke kommer några av dina fält att vara selektiva och vissa kommer inte att vara det. Till exempel misstänker jag att filtrering med "OK" inte kommer att vara särskilt selektiv. Du kan eliminera icke-selektiva fält från indexeringsöverväganden - om någon vill ha alla beställningar som är "OK" utan andra villkor kommer de att göra en tabellskanning. Om någon vill ha order som är "OK" och som har andra villkor, kommer det index som är tillämpligt på andra villkor att användas.

Nu när du har selektiva (eller åtminstone något selektiva) fält, fundera över vilka frågor som är både populära och selektiva. Till exempel kanske varumärke+typ skulle vara en sådan kombination. Du kan lägga till sammansatta index som matchar populära frågor som du förväntar dig att vara selektiva.

Nu, vad händer om någon filtrerar bara efter varumärke? Detta kan vara selektivt eller inte beroende på data. Om du redan har ett sammansatt index för varumärke+typ, låter du databasen avgöra om en fråga med enbart varumärke är mer effektiv att uppfylla via varumärke+typindex eller via en samlingsskanning.

Fortsätt på detta sätt med andra populära frågor och fält.



  1. MongoDB BSON-guide

  2. Hur fungerar Redis PubSub-prenumerationsmekanismen?

  3. Realtidschatt med Modulus och Node.js

  4. Node.js - vänta på flera asynkrona samtal