sql >> Database teknologi >  >> NoSQL >> MongoDB

PostgreSQL og MongoDB WHERE IN betingelser

Forskellen i forespørgsels eksekveringstid er, fordi den første udførelse skal læse langt flere 8kB blokke fra disken:sammenlign shared read=631496 og shared read=30359 .

PostgreSQL beslutter ikke at bruge indekset til WHERE betingelse, men indekset, der understøtter ORDER BY . Bemærk, at på grund af IN det er ikke muligt at bruge ét indeks for både WHERE betingelse og ORDER BY – det er kun muligt for WHERE betingelser, der bruger = som sammenligningsoperatør.

Så PostgreSQL er nødt til at træffe et valg, og det gør sandsynligvis det forkerte:da dets statistik fortæller optimeringsværktøjet, at der er mange rækker, der opfylder WHERE betingelse, beslutter den at læse rækkerne i ORDER BY bestil og kasser dem, der ikke matcher WHERE tilstand, indtil den har fundet 100 resultatrækker. Desværre ser det ud til, at de matchende rækker ikke er tæt på begyndelsen af ​​tabellen, og PostgreSQL skal scanne mange rækker (Rows Removed by Filter: 17276154 ).

For at få det til at bruge en indeksscanning efter WHERE betingelse, skal du ændre ORDER BY klausul, så PostgreSQL ikke kan bruge et indeks til det:

ORDER BY datetime + INTERVAL '0 seconds' DESC

Da der ikke er brug for et indeks med flere kolonner her, ville det bedste indeks være

CREATE INDEX ON report (sensor_id);


  1. Understøtter Mongoose Mongodb `findAndModify`-metoden?

  2. spring-data-redis redisTemplate Undtagelse

  3. MongoDB (Java) - Hvordan kører man forespørgsel gemt i javascript-fil?

  4. Visning af MongoDB-dokumenter med HTML