sql >> Databasteknik >  >> RDS >> PostgreSQL

Kan jag dela en fråga i flera frågor eller skapa parallellism för att påskynda en fråga?

Överväg att markera din map.get_near_link fungera som PARALLEL SAFE . Detta kommer att tala om för databasmotorn att det är tillåtet att försöka generera en parallell plan när funktionen exekveras:

Det finns flera inställningar som kan göra att frågeplaneraren inte under några omständigheter genererar en parallell frågeplan. Tänk på den här dokumentationen:

På min läsning kan du kanske uppnå en parallell plan om du refaktorerar din funktion så här:

CREATE OR REPLACE FUNCTION map.get_near_link(
    x NUMERIC,
    y NUMERIC,
    azim NUMERIC)
RETURNS TABLE
(Link_ID INTEGER, Distance INTEGER, Sendito TEXT, Geom GEOGRAPHY)
AS
$$
        SELECT 
               S.Link_ID,
               TRUNC(ST_Distance(ST_GeomFromText('POINT('|| X || ' ' || Y || ')',4326), S.geom) * 100000)::INTEGER AS distance,
               S.sentido,
               v.geom
        FROM (
          SELECT *
          FROM map.vzla_seg
          WHERE ABS(Azim - S.azimuth) NOT BETWEEN 30 AND 330
        ) S
          INNER JOIN map.vzla_rto v
            ON S.link_id = v.link_id
        WHERE
            ST_Distance(ST_GeomFromText('POINT('|| X || ' ' || Y || ')',4326), S.geom) * 100000 < 50
        ORDER BY
            S.geom <-> ST_GeomFromText('POINT('|| X || ' ' || Y || ')', 4326)
        LIMIT 1
$$
LANGUAGE SQL
PARALLEL SAFE -- Include this parameter
;

Om frågeoptimeraren genererar en parallell plan när den här funktionen körs, behöver du inte implementera din egen parallelliseringslogik.



  1. MyBatis extra kommatecken i uppdateringsfrågan

  2. Hur man kör en .SQL-skriptfil med c#

  3. Hur man skapar tabeller med hjälp av GUI i SQL Server - SQL Server / T-SQL Tutorial Del 37

  4. skriv om webbadresser för produktnamn