Mysql
 sql >> Database >  >> RDS >> Mysql

aumentare le prestazioni su una query SELECT con set di dati di punti 3D di grandi dimensioni

B-Tree gli indici non saranno di grande aiuto per una query del genere.

Cosa ti serve come R-Tree index e la query parallelepipeda di delimitazione minima su di esso.

Sfortunatamente, MySQL non supporta R-Tree indici su 3d punti, solo 2d . Tuttavia, puoi creare un indice su, diciamo, X e Y insieme che saranno più selettivi di qualsiasi B-Tree indici su X e Y da solo:

ALTER TABLE points ADD xy POINT;

UPDATE  points
SET     xy = Point(x, y);

ALTER TABLE points MODIFY xy POINT NOT NULL;


CREATE SPATIAL INDEX sx_points_xy ON points (xy);

SELECT  *
FROM    points
WHERE   MBRContains(LineString(Point(100, 100), Point(200, 200), xy)
        AND z BETWEEN 100 and 200
        AND otherParameter > 10;

Questo è possibile solo se la tua tabella è MyISAM .