Jump to content
php.lv forumi

Spatial indexa izmantošana


codez

Recommended Posts

Varbūt te kāds ir ņēmies ar spatial indexiem un zinās kas un kā jādara.

 

Ir tabula:

id integer

pos point

n integer

 

spatial index ar pos.

 

Vajag dabūt 10 punktus ar lielākajām n vērtībām noteikta daudzstūra iekšienē.

 

Šis kverijs to dara:

SELECT id,AsText(pos),n FROM ge WHERE MBRContains(GeomFromText('Polygon((5 5,8 5,8 8,5 8,5 5))'),pos) ORDER BY n desc LIMIT 10  ;

 

Bet, EXPLAIN rāda:

1, 'SIMPLE', 'ge', 'range', 'Index_2', 'Index_2', '32', '', 60, 'Using where; Using filesort'

 

Ja datubāzē būs miljons ieraksti, tad šis "Using filesort", noteiktos gadījumos būs pavisam neskaists.

Vai kāds nezin kādu labu vafiantu, kā šo problēmu varētu atrisināt bez filesort?

Edited by codez
Link to comment
Share on other sites

Uz n ir atsevišķs BTREE indeks, jo integer laukus nevar pielikt SPATIAL indeksam.

 

Bez ORDER BY, viss ir jauki, tā ka tam jābūt, apskatīti tiek tikai 10 ieraksti:

EXPLAIN SELECT id,AsText(pos),n FROM ge WHERE MBRContains(GeomFromText('Polygon((5 5,8 5,8 8,5 8,5 5))'),pos) LIMIT 10 ;

1, 'SIMPLE', 'ge', 'range', 'Index_2', 'Index_2', '32', '', 10, 'Using where'

Link to comment
Share on other sites

×
×
  • Create New...