sql >> Database teknologi >  >> RDS >> Mysql

øger ydeevnen på en SELECT-forespørgsel med stort 3D-punktdatasæt

B-Tree indekser hjælper ikke meget for sådan en forespørgsel.

Hvad du skal bruge som et R-Tree indeks og den minimale afgrænsende parallelepipedum-forespørgsel over det.

Desværre, MySQL understøtter ikke R-Tree indekserer over 3d point, kun 2d . Du kan dog oprette et indeks over f.eks. X og Y sammen, hvilket vil være mere selektivt end nogen af ​​B-Tree indekserer på X og Y alene:

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;

Dette er kun muligt, hvis din tabel er MyISAM .



  1. Returner kolonneoplysninger for en lagret procedure i SQL Server:sp_sproc_columns

  2. Forskellen mellem database og skema

  3. Skift en kolonnetype fra Dato til DateTime under ROR-migrering

  4. docker commit mysql gemmer ikke