MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Condições PostgreSQL e MongoDB WHERE IN


A diferença no tempo de execução da consulta é porque a primeira execução precisa ler muito mais blocos de 8kB do disco:compare shared read=631496 e shared read=30359 .

PostgreSQL decide não usar o índice para WHERE condição, mas o índice que suporta o ORDER BY . Observe que por causa do IN não é possível usar um índice tanto para WHERE condição e o ORDER BY – isso só é possível para WHERE condições que usam = como operador de comparação.

Então o PostgreSQL tem que fazer uma escolha, e provavelmente faz a escolha errada:já que suas estatísticas dizem ao otimizador que existem muitas linhas que satisfazem o WHERE condição, ele decide ler as linhas em ORDER BY ordenar e descartar os que não correspondem ao WHERE condição até encontrar 100 linhas de resultados. Infelizmente, parece que as linhas correspondentes não estão perto do início da tabela, e o PostgreSQL precisa varrer muitas linhas (Rows Removed by Filter: 17276154 ).

Para fazê-lo, use uma varredura de índice para o WHERE condição, modifique o ORDER BY cláusula para que o PostgreSQL não possa usar um índice para ela:
ORDER BY datetime + INTERVAL '0 seconds' DESC

Como não há uso para um índice de várias colunas aqui, o melhor índice seria
CREATE INDEX ON report (sensor_id);