sql >> Databasteknik >  >> NoSQL >> MongoDB

PostgreSQL och MongoDB WHERE I villkor

Skillnaden i frågas exekveringstid beror på att den första exekveringen måste läsa mycket fler 8kB block från disken:jämför shared read=631496 och shared read=30359 .

PostgreSQL beslutar att inte använda indexet för WHERE condition, men indexet som stöder ORDER BY . Observera att på grund av IN det är inte möjligt att använda ett index för både WHERE skick och ORDER BY – det är bara möjligt för WHERE villkor som använder = som jämförelseoperatör.

Så PostgreSQL måste göra ett val, och det gör förmodligen fel:eftersom dess statistik talar om för optimeraren att det finns många rader som uppfyller WHERE villkor, bestämmer den sig för att läsa raderna i ORDER BY beställ och kassera de som inte matchar WHERE skick tills den har hittat 100 resultatrader. Tyvärr verkar det som om de matchande raderna inte är nära början av tabellen, och PostgreSQL måste skanna många rader (Rows Removed by Filter: 17276154 ).

För att göra det använd en indexsökning efter WHERE villkor, ändra ORDER BY så att PostgreSQL inte kan använda ett index för det:

ORDER BY datetime + INTERVAL '0 seconds' DESC

Eftersom det inte finns någon användning för ett index med flera kolumner här, skulle det bästa indexet vara

CREATE INDEX ON report (sensor_id);


  1. Spring Data MongoDB med Java 8 LocalDate MappingException

  2. Vad är resultatet av en filström?

  3. Tips för att lagra MongoDB-säkerhetskopior i molnet

  4. Mongodb aggregerade argument till $lookup måste vara strängar