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

Производителност на PostgreSQL - SELECT срещу съхранена функция

Планировчикът има проблем с вашата заявка, тъй като не може да оцени времето за изпълнение на функцията. В този случай планиращият получава прогнозните разходи за изпълнение на функцията, които могат да бъдат дефинирани в create function... или alter function... . Ако обаче опитате тази заявка:

explain analyse select * from test(10);

ще видите, че времето за изпълнение е много по-реалистично.

Сравнете:

test=# explain analyse select test(1000);
                                        QUERY PLAN
------------------------------------------------------------------------------------------
 Result  (cost=0.00..5.25 rows=1000 width=0) (actual time=0.830..1.220 rows=1000 loops=1)
 Planning time: 0.038 ms
 Execution time: 1.250 ms
(3 rows)

спрямо:

test=# explain analyse select * from test(1000);
                                                   QUERY PLAN
----------------------------------------------------------------------------------------------------------------
 Limit  (cost=0.00..37.42 rows=1000 width=4) (actual time=0.006..0.124 rows=1000 loops=1)
   ->  Seq Scan on test_table  (cost=0.00..2560.28 rows=68428 width=4) (actual time=0.005..0.102 rows=1000 loops=1)
 Planning time: 0.130 ms
 Execution time: 0.144 ms
(4 rows)


test=# explain analyse select * from test_table limit 1000;
                                                    QUERY PLAN
------------------------------------------------------------------------------------------------------------------
 Limit  (cost=0.00..37.42 rows=1000 width=269) (actual time=0.009..0.118 rows=1000 loops=1)
   ->  Seq Scan on test_table  (cost=0.00..2560.28 rows=68428 width=269) (actual time=0.008..0.097 rows=1000 loops=1)
 Planning time: 0.076 ms
 Execution time: 0.151 ms
(4 rows)

Обърнете внимание на сходството на последните два плана. Таблични функции (функции, които връщат набор от редове или таблица, както в този случай) трябва да се извикат в FROM клауза. При определени условия те могат да бъдат вградени.

Прочетете повече:Вграждане на SQL функции .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. sqlalchemy postgresql където int =низ

  2. Намерете всички пресечни точки на всички набори от диапазони в PostgreSQL

  3. SQL:Добавете колона с инкрементален идентификатор към SELECT

  4. Как да вмъкна няколко реда с външен ключ, използвайки CTE в Postgres?

  5. Използване на JSONB в PostgreSQL:Как ефективно да съхранявате и индексирате JSON данни в PostgreSQL