Mysql
 sql >> Base de données >  >> RDS >> Mysql

augmentation des performances sur une requête SELECT avec un grand ensemble de données de points 3D

B-Tree les index n'aideront pas beaucoup pour une telle requête.

Ce dont vous avez besoin en tant que R-Tree index et la requête parallélépipède de délimitation minimale dessus.

Malheureusement, MySQL ne prend pas en charge R-Tree indexe sur 3d points, seulement 2d . Cependant, vous pouvez créer un index sur, disons, X et Y ensemble qui sera plus sélectif que n'importe lequel des B-Tree indexe sur X et Y seul :

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;

Ceci n'est possible que si votre table est MyISAM .