A vantagem da busca por células interiores (`is_inner`) é que a busca pode se restringir à BBOX (operador &&), sem conferir a interseção com o polígono. O número de células marcadas com `is_inner`, todavia, na maior parte dos países, não passa de 30%. ... Esquecemos que o ponto para "estar no município X" não precisa estar "dentro do polígono do município X", basta estar na sua cobertura. Usando essa propriedade podemos trocar o flag por `is_not_shared` (ou "is_unique"). No Brasil isso significa incluir todas as células de cobertura de litoral e fronteiras, acrescentando mais uns 20% de células municipais. Conclusão: com a simples troca de flag chegamos nos 50% de comparações por BBOX, e excluimos elas das comparações por interseção. Importante: a indexação GIST precisaria ser pela operação da busca, `is_not_shared OR ST_Intersects(?)`, mas <br/> `WHERE pt_geom && cell_geom AND (is_not_shared OR ST_Intersects(pt_geom,cell_geom))`. ... testar com dois indices, um com outro sem o flag: * CREATE INDEX mytable_geom_idx1 ON t USING GIST (geom) WHERE is_not_shared; * CREATE INDEX mytable_geom_idx2 ON t USING GIST (geom); ... Ver https://gis.stackexchange.com/q/487330/7505 ----- Toda célula interior é *is_not_shared*, mas precisamos expandir. Construção do flag *is_not_shared* para as células de cobertura municipal (não overlay). ```sql UPDATE t SET is_not_shared=true WHERE gid IN (SELECT gid FROM cobertura_municipal GROUP BY 1 HAVING COUNT(*)=1) ``` Problema: isso vale para células de mesmo nível, falta remover as grandes que cobrem as pequenas.