Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

aumentando o desempenho em uma consulta SELECT com grande conjunto de dados de ponto 3D


B-Tree índices não ajudarão muito para tal consulta.

O que você precisa como uma R-Tree index e a consulta paralelepípeda de limite mínimo sobre ele.

Infelizmente, MySQL não suporta R-Tree índices sobre 3d pontos, apenas 2d . No entanto, você pode criar um índice sobre, digamos, X e Y juntos que serão mais seletivos que qualquer um dos B-Tree índices em X e Y sozinho:
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;

Isso só é possível se sua tabela for MyISAM .