Как я могу узнать большую букву O из EXPLAIN (ANALYZE) в PostgreSQL - PullRequest
0 голосов
/ 03 мая 2019

это ОБЪЯСНЕНИЕ (АНАЛИЗ) из PostgreSQL

GroupAggregate  (cost=245.73..292.69 rows=1174 width=46) (actual time=38.850..39.454 rows=148 loops=1)
  Group Key: location_id, (date_trunc('day'::text, created_at)), payment_method
  ->  Sort  (cost=245.73..248.66 rows=1174 width=42) (actual time=38.829..38.916 rows=1100 loops=1)
        Sort Key: location_id, (date_trunc('day'::text, created_at)), payment_method
        Sort Method: quicksort  Memory: 165kB
        ->  Seq Scan on payment p  (cost=0.00..185.87 rows=1174 width=42) (actual time=1.905..6.849 rows=1100 loops=1)
              Filter: ((location_id IS NOT NULL) AND (created_at <= '2019-04-23 00:00:00+00'::timestamp with time zone) AND (created_at >= '2000-04-23 00:00:00+00'::timestamp with time zone) AND ((entity_type)::text = 'RESERVATION'::text) AND ((payment_status)::text = ANY ('{SUCCESS,CAPTURE,REFUNDED}'::text[])))
              Rows Removed by Filter: 2238
Planning Time: 1.895 ms
Execution Time: 39.727 ms

Это мой код запроса

select  p.location_id,
        date_trunc('day', p.created_at) as date,
        p.payment_method,
        count(p.id), sum(p.sub_amount)+sum(p.mdr_fee)+sum(p.convenience_fee) as GrossSales,
        sum(p.sub_amount) netSales
from payment p
where p.location_id is not null
  and p.entity_type = 'RESERVATION'
  and p.payment_status in ('SUCCESS','CAPTURE','REFUNDED')
  and created_at <= '2019-04-23'
  and created_at >= '2000-04-23'
group by p.location_id, date, p.payment_method
order by p.location_id asc, date asc, p.payment_method;

Я не знаю, как увидеть большую букву O ОБЪЯСНИТЬ (АНАЛИЗ)).

1 Ответ

1 голос
/ 03 мая 2019

Вы не увидите & ldquo; большую букву O & rdquo; в EXPLAIN (ANALYZE).

Это не то, что вы можете видеть в одной точке данных, это описание того, как определенные параметры входных данных (например, размер таблицы) влияют на время выполнения определенного алгоритма. Это можно измерить, используя один и тот же алгоритм для разных входных данных, но обычно это определяется путем анализа алгоритма.

Например, при последовательном сканировании расход O (n), где n - размер таблицы. Это означает, что для стола, который в два раза больше, потребуется примерно вдвое больше времени. Стоимость сортировки составляет O (n & ld; ln (n)), где & ldquo; ln & rdquo; является логарифмом, что означает, что он будет заметно более чем в два раза дороже за набор, вдвое больший.

Измерения (например, EXPLAIN (ANALYZE)) не являются хорошим способом определения таких чисел, потому что всегда присутствуют различные факторы (например, кеширование), которые затеняют числа. Кроме того, вам не нужно догадываться, что расходы могут быть O (n), вам нужно математическое доказательство.

...