EXPLAIN ANALYZEがクエリ時間を返すことは知っていますが、私のユースケースではそうではないようです。 (私が何かを逃していない限り...それは何である可能性があります...?)
SELECT cars.*, users.*, makers.*, places.*
FROM cars
LEFT OUTER JOIN "users" ON "users"."id" = "cars"."user_id"
LEFT OUTER JOIN "makers" ON "makers"."id" = "cars"."company_id"
LEFT OUTER JOIN "places" ON "places"."id" = "cars"."location_id"
WHERE "cars"."deleted_at" IS NULL
AND "cars"."draft" = 'f'
AND ((cars.reference_number::text ILIKE '%abc123%')
OR (makers.name::text ILIKE '%abc123%')
OR (places.name::text ILIKE '%abc123%'))
ORDER BY cars.id DESC NULLS LAST
LIMIT 20
OFFSET 0;
EXPLAIN ANALYZEの出力:
Planning time: 1.300 ms
Execution time: 105.936 ms
\ timingを使用したSELECT出力:
Time: 2100.704 ms (00:02.101)
EXPLAIN ANALYZEにはデータを読み取る時間は含まれていないようです。
(PSQLコンソールではなく)SQLを使用せずに合計時間を取得するにはどうすればよいですか?
PostgreSQL 9.6.6
コメントのa_horse_with_no_name
から、
実際に、explain(analyze)によって報告される時間には、SQLクライアントにデータを送信するのにかかる時間は含まれていません。これは、サーバーが結果をドライバーに送信できるように完全に準備するために必要な時間です。その後の遅延は完全にSQLクライアントとクライアントとサーバー間のネットワークの組み合わせ次第なので、説明することは不可能です
それで十分です。 1つはサーバー側、もう1つはネットワーク側です。
ネットワーク時間とクライアント時間を含める場合は、クライアントでタイマーを開始および停止します。どんなクライアントであろうと。