sql >> Databáze >  >> NoSQL >> MongoDB

PostgreSQL a MongoDB WHERE v podmínkách

Rozdíl v době provádění dotazu je v tom, že první spuštění musí načíst mnohem více 8kB bloků z disku:porovnejte shared read=631496 a shared read=30359 .

PostgreSQL se rozhodne nepoužít index pro WHERE podmínku, ale index, který podporuje ORDER BY . Všimněte si, že kvůli IN není možné použít jeden index pro oba WHERE podmínku a ORDER BY – to je možné pouze pro WHERE podmínky, které používají = jako operátor porovnání.

PostgreSQL si tedy musí vybrat a pravděpodobně udělá špatnou:protože jeho statistiky říkají optimalizátoru, že existuje mnoho řádků, které splňují WHERE se rozhodne číst řádky v ORDER BY objednejte a zlikvidujte ty, které neodpovídají WHERE dokud nenajde 100 řádků výsledků. Bohužel se zdá, že odpovídající řádky nejsou blízko začátku tabulky a PostgreSQL musí skenovat mnoho řádků (Rows Removed by Filter: 17276154 ).

Chcete-li to provést, použijte indexové skenování pro WHERE podmínku, upravte ORDER BY klauzule, aby PostgreSQL nemohl použít index:

ORDER BY datetime + INTERVAL '0 seconds' DESC

Protože zde není použití vícesloupcového indexu, nejlepší index by byl

CREATE INDEX ON report (sensor_id);


  1. řazení podle data s agregovaným požadavkem v mongodb

  2. MongoDb serializuje obecné typy (třídy)

  3. MongoDb se vypne pomocí kódu 100

  4. Jak zkombinovat použití operátoru all a icontains pro mongoengine