sql >> Databasteknik >  >> RDS >> Mysql

öka prestanda på en SELECT-fråga med stor 3D-punktdatauppsättning

B-Tree index hjälper inte mycket för en sådan fråga.

Vad du behöver som ett R-Tree index och den minimala gränsande parallellepipedfrågan över den.

Tyvärr, MySQL stöder inte R-Tree indexerar över 3d poäng, endast 2d . Du kan dock skapa ett index över, säg, X och Y tillsammans vilket kommer att vara mer selektivt än något av B-Tree indexerar på X och Y ensam:

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;

Detta är bara möjligt om din tabell är MyISAM .



  1. Ansluter IRI Software till Oracle

  2. QueryException SQLSTATE[HY000] [1045] Åtkomst nekad för användaren 'homestead'@'localhost' (med lösenord:JA)

  3. Hur får man en lista över databaser?

  4. Konvertera sträng till MySQL-tidsstämpelformat i php