Acho que
OFFSET 0
é a melhor abordagem, pois é mais obviamente um hack mostrando que algo estranho está acontecendo, e é improvável que mudemos o comportamento do otimizador em torno de OFFSET 0
... onde Para subconsultas não correlacionadas, você poderia explorar a recusa do PostgreSQL 11 e anteriores em inline
WITH
termos de consulta para reformular sua consulta como:WITH t AS (
SELECT * FROM tbl WHERE id IN ('6d48fc431d21', 'd9e659e756ad')
)
SELECT COUNT(*)
FROM t
WHERE data ? 'building_floorspace'
AND data ?| ARRAY['elec_mean_monthly_use', 'gas_mean_monthly_use'];
Isso tem o mesmo efeito que o
OFFSET 0
hack e como o offset 0
hack explora peculiaridades no otimizador do Pg que as pessoas usam para contornar a falta de dicas de consulta do Pg ... usando-as como dicas de consulta. Mas o
OFFSET 0
hack é um pouco oficialmente abençoado, enquanto o abuso de CTE não funciona mais no PostgreSQL 12. (Yay!).