अपने map.get_near_link
को चिह्नित करने पर विचार करें PARALLEL SAFE
के रूप में कार्य करें
. यह डेटाबेस इंजन को बताएगा कि उसे फ़ंक्शन निष्पादित करते समय समानांतर योजना बनाने का प्रयास करने की अनुमति है:
ऐसी कई सेटिंग्स हैं जो क्वेरी प्लानर को किसी भी परिस्थिति में समानांतर क्वेरी प्लान नहीं बनाने का कारण बन सकती हैं। इस दस्तावेज़ पर विचार करें:
मेरे पढ़ने पर, आप एक समानांतर योजना प्राप्त करने में सक्षम हो सकते हैं यदि आप अपने कार्य को इस तरह से रिफलेक्टर करते हैं:
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
;
यदि इस फ़ंक्शन को निष्पादित करते समय क्वेरी ऑप्टिमाइज़र एक समानांतर योजना उत्पन्न करेगा, तो आपको अपने स्वयं के समानांतर तर्क को लागू करने की आवश्यकता नहीं होगी।