sql >> Base de Datos >  >> RDS >> Mysql

aumentar el rendimiento en una consulta SELECT con un gran conjunto de datos de puntos 3D

B-Tree los índices no ayudarán mucho para tal consulta.

Lo que necesitas como R-Tree índice y la consulta de paralelepípedo delimitador mínimo sobre él.

Desafortunadamente, MySQL no es compatible con R-Tree índices sobre 3d puntos, solo 2d . Sin embargo, puede crear un índice sobre, digamos, X y Y juntos, que serán más selectivos que cualquiera de los B-Tree índices en X y Y 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;

Esto solo es posible si su tabla es MyISAM .