sql >> Database >  >> NoSQL >> MongoDB

PostgreSQL en MongoDB WAAR IN VOORWAARDEN

Het verschil in de uitvoeringstijd van de query is omdat de eerste uitvoering veel meer blokken van 8 kB van schijf moet lezen:vergelijk shared read=631496 en shared read=30359 .

PostgreSQL besluit de index niet te gebruiken voor de WHERE voorwaarde, maar de index die de ORDER BY . ondersteunt . Merk op dat vanwege de IN het is niet mogelijk om één index te gebruiken voor zowel de WHERE staat en de ORDER BY – dat kan alleen voor WHERE voorwaarden die gebruik maken van = als vergelijkingsoperator.

Dus PostgreSQL moet een keuze maken, en waarschijnlijk maakt het de verkeerde:aangezien de statistieken de optimizer vertellen dat er veel rijen zijn die voldoen aan de WHERE voorwaarde, besluit het de rijen in ORDER BY . te lezen bestel en gooi degenen weg die niet overeenkomen met de WHERE voorwaarde totdat het 100 resultaatrijen heeft gevonden. Helaas lijkt het erop dat de overeenkomende rijen niet dicht bij het begin van de tabel staan, en PostgreSQL moet veel rijen scannen (Rows Removed by Filter: 17276154 ).

Gebruik hiervoor een indexscan voor de WHERE staat, wijzigt u de ORDER BY clausule zodat PostgreSQL er geen index voor kan gebruiken:

ORDER BY datetime + INTERVAL '0 seconds' DESC

Aangezien er hier geen gebruik is voor een index met meerdere kolommen, zou de beste index zijn

CREATE INDEX ON report (sensor_id);


  1. Hoe MongoDB native query (JSON) uitvoeren met alleen mongo-java-driver?

  2. Mongodb:Voer een datumbereikquery uit vanaf de ObjectId in de mongo-shell

  3. MongoDB Yaml-configuratiebestand Niet-herkende optie:opslag

  4. mongodb db.collection.find({}) doet niets voorbij .limit(101)