0
私は約4百万エントリの非正規化スキーマ(1テーブル)を持つpostgresqlデータベースを持っています。これは、2分に約14秒かかります(多くの他のものが起こっているかによって異なります)Postgresqlクエリのパフォーマンスを向上
SELECT
count(*) AS Total,
(SELECT count(*) FROM table
WHERE "Timestamp" > current_timestamp - INTERVAL '1 hour' AND "tableName" LIKE '%ping%') AS hour,
(SELECT count(*) FROM table
WHERE "Timestamp" > now() :: DATE AND "tableName" LIKE '%ping%') AS day,
(SELECT count(*)
FROM table
WHERE "Timestamp" > now() :: DATE - INTERVAL '1 day' AND
"Timestamp" <= now() :: DATE - INTERVAL '1 day' AND "tableName" LIKE '%ping%') AS yesterday,
(SELECT count(*) FROM table
WHERE "Timestamp" > now() :: DATE - INTERVAL '2 day' AND
"Timestamp" <= now() :: DATE - INTERVAL '1 day' AND "tableName" LIKE '%ping%') AS "dayBeforeYesterday",
(SELECT count(*)
FROM table WHERE "Timestamp" > current_timestamp - INTERVAL '1 week' AND "tableName" LIKE '%ping%') AS week,
(SELECT count(*)
FROM table
WHERE "Timetamp" > current_timestamp - INTERVAL '2 week' AND
"Timestamp" < current_timestamp - INTERVAL '1 week' AND "tableName" LIKE '%ping%') AS "lastWeek",
(SELECT count(*)
FROM table
WHERE "Timestamp" > current_timestamp - INTERVAL '3 week' AND
"Timestamp" < current_timestamp - INTERVAL '2 week' AND "tableName" LIKE '%ping%') AS "weekBeforeLastWeek",
(SELECT count(*)
FROM table
WHERE"Timestamp" > current_timestamp - INTERVAL '1 month' AND "tableName" LIKE '%ping%')AS month
FROM table WHERE "tableName" LIKE '%ping%';
:今、私はこのクエリを持っています。 Azureでホストされたubuntuを持つVMである私のサーバは常に両方のCPUを100%カバーしています。 私はpostgesqlの統計をチェックすると、それは主にCPU全体をブロックするこのクエリです。 2コア、7GB SSDのD2 VMです。 Azureパッケージをアップグレードせずにこれをスピードアップする方法はありますか?代わりに、これらすべてのサブクエリの
あなたはdenormalisationのパフォーマンスへの影響を確認しましたか?このクエリが3つの列のみを参照するという事実を考えると、正規化はこのクエリのメモリフットプリントを確実に減少させるでしょう。 – joop