PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Мога ли да разделя заявка на няколко заявки или да създам паралелизъм, за да ускоря заявката?

Помислете за маркиране на вашата 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
;

Ако оптимизаторът на заявки ще генерира паралелен план при изпълнение на тази функция, няма да е необходимо да прилагате своя собствена логика за паралелизиране.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да зададете стойност на полето за съставна променлива с помощта на динамичен SQL

  2. Как да върнете резултатите от заявката като списък, разделен със запетая в PostgreSQL

  3. Асоциациите в последователността не работят по предназначение

  4. PostgreSQL:АКТУАЛИЗИРАНЕ с помощта на агрегатна функция

  5. POSTGRESQL INSERT, ако конкретно име на ред не съществува?