Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Leistungssteigerung bei einer SELECT-Abfrage mit großem 3D-Punktdatensatz

B-Tree Indizes werden bei einer solchen Abfrage nicht viel helfen.

Was Sie als R-Tree brauchen index und die minimale begrenzende Parallelepiped-Abfrage darüber.

Leider MySQL unterstützt R-Tree nicht Indizes über 3d Punkte, nur 2d . Sie können jedoch einen Index über beispielsweise X erstellen und Y zusammen, die selektiver sind als jeder der B-Tree Indizes auf X und Y allein:

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;

Dies ist nur möglich, wenn Ihre Tabelle MyISAM ist .