Estoy tratando de configurar un índice geoespacial para realizar consultas de intersección en un Ignite Cache. Puedo establecer el campo como consultable y he establecido el índice usando la sintaxis recomendada .setIndexes(new QueryIndex("columnName") .
Sin embargo, cuando realizo un SqlFieldsQuery "EXPLAIN SELECT" en el caché, veo .__SCAN en lugar de la columna indexada. Creo que esto significa que está escaneando todo el caché en lugar de usar el índice, pero no pude encontrar documentación al respecto.
'SELECT\n' + ' "__Z0"."EXAMPLESTRING" AS "__C0_0",\n' + ' "__Z0"."EXAMPLESPATIAL" AS "__C0_1"\n' + 'FROM "mySpatialGeometryCache"."EXTENDEDPOINT" "__Z0"\n' + ' /* mySpatialGeometryCache.EXTENDEDPOINT.__SCAN_ */\n' + 'WHERE INTERSECTS("__Z0"."EXAMPLESPATIAL", ?1)' Aquí está la queryEntity de consulta que he configurado:
new QueryEntity() .setValueTypeName("ExtendedPoint") .setFields([ new QueryField("exampleString", "java.lang.String"), new QueryField("exampleSpatial", "java.lang.String"), ]) .setIndexes( new Array(new QueryIndex("geo",QueryIndex.INDEX_TYPE.GEOSPATIAL)) ) );No recibo ningún error ni advertencia en la consola, y puedo consultar el campo exampleSpatial sin problemas, pero quiero asegurarme de que se usa un índice para que funcione mejor cuando el volumen de la memoria caché es mayor.
Siga esta guía cuando cree índices.
Busque en la vista del sistema ÍNDICES para ver si ha indexado los campos correctos.
Utilice el comando EXPLAIN para ver qué índices el optimizador considera útiles para una consulta determinada.