Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dPWDJ-0007af-19 for pgsql-performance@arkaria.postgresql.org; Mon, 26 Jun 2017 15:46:09 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.84_2) (envelope-from ) id 1dPWDI-00068v-FS for pgsql-performance@arkaria.postgresql.org; Mon, 26 Jun 2017 15:46:08 +0000 Received: from makus.postgresql.org ([2001:4800:1501:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1dPWB7-0002kX-87 for pgsql-performance@postgresql.org; Mon, 26 Jun 2017 15:43:53 +0000 Received: from mail-wm0-x22e.google.com ([2a00:1450:400c:c09::22e]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.84_2) (envelope-from ) id 1dPWB2-0006FX-El for pgsql-performance@postgresql.org; Mon, 26 Jun 2017 15:43:51 +0000 Received: by mail-wm0-x22e.google.com with SMTP id 62so1249377wmw.1 for ; Mon, 26 Jun 2017 08:43:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=simply-italian-co-uk.20150623.gappssmtp.com; s=20150623; h=mime-version:sender:from:date:message-id:subject:to:cc; bh=AOlVFJauhYx1dPf2ujuPTsOjowhyZMe6sTrTD5eYdFs=; b=DUZ4k/sX+pxr/2CIHFw8PZR/Fw98kjmQpXEQoPpFRikZdUWkR3v0dCMWYwinXk4B6R mZxBeKRWc12FINwWUU4QgL6ouMa5JKGS9pf8yq3kTFqPoBt3ec39JILSv4x983A8M/O6 LZv/YLq/u5ZO/pXzY9UleCD9GY2reBLuCDtOq/+aTQBsoWvLjgp7PsfqqAa6V567e3rU 5KEA8GG3jSD+Pxg39tivynZmXwVCiikVsKFyess4ptQrwHQvHxyjuGKB8vFBniLwluv4 bY3i4VdE1NfVgxfgooDNT+rRV2doGWzDQzGtsjKVGBlPxmTY6ESPzjZHxPkWgOAnTAo0 GJdQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:sender:from:date:message-id:subject :to:cc; bh=AOlVFJauhYx1dPf2ujuPTsOjowhyZMe6sTrTD5eYdFs=; b=DBXFZk5QSKlFMzYrsDX1wLwsStgf+8JxbpDWJlgywdgRlRO5nEU2XtSzYbMr7NTOQq HTVkJIK2mcb/zkgf3KxS/CENB55jQbuvdz0J7EUJKylGC8zKUJ6MXNHirI8+uwMADz6N U+nkaVMwecNJibfyfOwbK87cspp+kbP1pytCTnVcVYcrY5GG0lNfTUsrz1nOV0IiCYuo AwlqHBEp+sNgL0wS8SodtuCANjNyePlajJYh9bzKdOPwmqyVDPbG8Eycs+TxsSs7h+FH LdVq59nB1kGo+RV1CTLzH+xljnNUn5m3eaY9grGoPG5/yGbi4poo7eHQrOPiKbma6Suh HqUQ== X-Gm-Message-State: AKS2vOyDC21ujPWfV5/ecgzqHn5Lc+0DuieR9pJQpgNgDRl6FrAtucXu 9pYwFnycEfE1F1hoPfIVBZjuUi1VB/Jw X-Received: by 10.28.232.67 with SMTP id f64mr149889wmh.54.1498491825552; Mon, 26 Jun 2017 08:43:45 -0700 (PDT) MIME-Version: 1.0 Received: by 10.28.66.2 with HTTP; Mon, 26 Jun 2017 08:43:04 -0700 (PDT) X-Originating-IP: [212.44.17.222] From: Chris Wilson Date: Mon, 26 Jun 2017 16:43:04 +0100 X-Google-Sender-Auth: ocpjwfqtJk4EDFPFONIhV_k1zaY Message-ID: Subject: Re: Fwd: Slow query from ~7M rows, joined to two tables of ~100 rows each To: Karl Czajkowski Cc: pgsql-performance@postgresql.org, george.saklatvala@cantabcapital.com Content-Type: multipart/related; boundary="001a1147c326f6a3740552ded0da" List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-Mailing-List: pgsql-performance Precedence: bulk Sender: pgsql-performance-owner@postgresql.org --001a1147c326f6a3740552ded0da Content-Type: multipart/alternative; boundary="001a1147c326f6a3710552ded0d9" --001a1147c326f6a3710552ded0d9 Content-Type: text/plain; charset="UTF-8" Hi Karl, Thanks for the quick reply! Answers inline. My starting point, having executed exactly the preparation query in my email, was that the sample EXPLAIN (ANALYZE, BUFFERS) SELECT query ran in 15.3 seconds (best of 5), and did two nested loops . On 24 June 2017 at 03:01, Karl Czajkowski wrote: > Also, did you include an ANALYZE step between your table creation > statements and your query benchmarks? Since you are dropping and > recreating test data, you have no stats on anything. I tried this suggestion first, as it's the hardest to undo, and could also be done automatically by a background ANALYZE while I wasn't looking. It did result in a switch to using hash joins (instead of nested loops), and to starting with the metric_value table (the fact table), which are both changes that I thought would help, and the EXPLAIN ... SELECT speeded up to 13.2 seconds (2 seconds faster; best of 5 again). Did you only omit a CREATE INDEX statement on asset_pos (id, pos) from > your problem statement or also from your actual tests? Without any > index, you are forcing the query planner to do that join the hard way. > I omitted it from my previous tests and the preparation script because I didn't expect it to make much difference. There was already a primary key on ID, so this would only enable an index scan to be changed into an index-only scan, but the query plan wasn't doing an index scan. It didn't appear to change the query plan or performance . Have you tried adding a foreign key constraint on the id_asset and > id_metric columns? I wonder if you'd get a better query plan if the > DB knew that the inner join would not change the number of result > rows. I think it's doing the join inside the filter step because > it assumes that the inner join may drop rows. > This didn't appear to change the query plan or performance either. > > This is an example of the kind of query we would like to speed up: > > > > > > SELECT metric_pos.pos AS pos_metric, asset_pos.pos AS pos_asset, > > date, value > > FROM metric_value > > INNER JOIN asset_pos ON asset_pos.id = metric_value.id_asset > > INNER JOIN metric_pos ON metric_pos.id = metric_value.id_metric > > WHERE > > date >= '2016-01-01' and date < '2016-06-01' > > AND timerange_transaction @> current_timestamp > > ORDER BY metric_value.id_metric, metric_value.id_asset, date > > > > How sparse is the typical result set selected by these date and > timerange predicates? If it is sparse, I'd think you want your > compound index to start with those two columns. > I'm not sure what "sparse" means? The date is a significant fraction (25%) of the total table contents in this test example, although we're flexible about date ranges (if it improves performance per day) since we'll end up processing a big chunk of the entire table anyway, batched by date. Almost no rows will be removed by the timerange_transaction filter (none in our test example). We expect to have rows in this table for most metric and asset combinations (in the test example we populate metric_value using the cartesian product of these tables to simulate this). I created the index starting with date and it did make a big difference: down to 10.3 seconds using a bitmap index scan and bitmap heap scan (and then two hash joins as before). I was also able to shave another 1.1 seconds off (down to 9.2 seconds) by materialising the cartesian product of id_asset and id_metric, and joining to metric_value, but I don't really understand why this helps. It's unfortunate that this requires materialisation (using a subquery isn't enough) and takes more time than it saves from the query (6 seconds) although it might be partially reusable in our case. CREATE TABLE cartesian AS SELECT DISTINCT id_metric, id_asset FROM metric_value; SELECT metric_pos.pos AS pos_metric, asset_pos.pos AS pos_asset, date, value FROM cartesian INNER JOIN metric_value ON metric_value.id_metric = cartesian.id_metric AND metric_value.id_asset = cartesian.id_asset INNER JOIN asset_pos ON asset_pos.id = metric_value.id_asset INNER JOIN metric_pos ON metric_pos.id = metric_value.id_metric WHERE date >= '2016-01-01' and date < '2016-06-01' AND timerange_transaction @> current_timestamp ORDER BY metric_value.id_metric, metric_value.id_asset, date; And I was able to shave another 3.7 seconds off (down to 5.6 seconds) by making the only two columns of the cartesian table into its primary key, although again I don't understand why: alter table cartesian add primary key (id_metric, id_asset); [image: Inline images 1] This uses merge joins instead, which supports the hypothesis that merge joins could be faster than hash joins if only we can persuade Postgres to use them. It also contains two materialize steps that I don't understand. > Finally, your subject line said you were joining hundreds of rows to > millions. In queries where we used a similarly small dimension table > in the WHERE clause, we saw massive speedup by pre-evaluating that > dimension query to produce an array of keys, the in-lining the actual > key constants in the where clause of a main fact table query that > no longer had the join in it. > > In your case, the equivalent hack would be to compile the small > dimension tables into big CASE statements I suppose... > Nice idea! I tried this but unfortunately it made the query 16 seconds slower (up to 22 seconds) instead of faster. I'm not sure why, perhaps the CASE expression is just very slow to evaluate? SELECT case metric_value.id_metric when 1 then 565 when 2 then 422 when 3 then 798 when 4 then 161 when 5 then 853 when 6 then 994 when 7 then 869 when 8 then 909 when 9 then 226 when 10 then 32 when 11 then 592 when 12 then 247 when 13 then 350 when 14 then 964 when 15 then 692 when 16 then 759 when 17 then 744 when 18 then 192 when 19 then 390 when 20 then 804 when 21 then 892 when 22 then 219 when 23 then 48 when 24 then 272 when 25 then 256 when 26 then 955 when 27 then 258 when 28 then 858 when 29 then 298 when 30 then 200 when 31 then 681 when 32 then 862 when 33 then 621 when 34 then 478 when 35 then 23 when 36 then 474 when 37 then 472 when 38 then 892 when 39 then 383 when 40 then 699 when 41 then 924 when 42 then 976 when 43 then 946 when 44 then 275 when 45 then 940 when 46 then 637 when 47 then 34 when 48 then 684 when 49 then 829 when 50 then 423 when 51 then 487 when 52 then 721 when 53 then 642 when 54 then 535 when 55 then 992 when 56 then 898 when 57 then 490 when 58 then 251 when 59 then 756 when 60 then 788 when 61 then 451 when 62 then 437 when 63 then 650 when 64 then 72 when 65 then 915 when 66 then 673 when 67 then 546 when 68 then 387 when 69 then 565 when 70 then 929 when 71 then 86 when 72 then 490 when 73 then 905 when 74 then 32 when 75 then 764 when 76 then 845 when 77 then 669 when 78 then 798 when 79 then 529 when 80 then 498 when 81 then 221 when 82 then 16 when 83 then 219 when 84 then 864 when 85 then 551 when 86 then 211 when 87 then 762 when 88 then 42 when 89 then 462 when 90 then 518 when 91 then 830 when 92 then 912 when 93 then 954 when 94 then 480 when 95 then 984 when 96 then 869 when 97 then 153 when 98 then 530 when 99 then 257 when 100 then 718 end AS pos_metric, case metric_value.id_asset when 1 then 460 when 2 then 342 when 3 then 208 when 4 then 365 when 5 then 374 when 6 then 972 when 7 then 210 when 8 then 43 when 9 then 770 when 10 then 738 when 11 then 540 when 12 then 991 when 13 then 754 when 14 then 759 when 15 then 855 when 16 then 305 when 17 then 970 when 18 then 617 when 19 then 347 when 20 then 431 when 21 then 134 when 22 then 176 when 23 then 343 when 24 then 88 when 25 then 656 when 26 then 328 when 27 then 958 when 28 then 809 when 29 then 858 when 30 then 214 when 31 then 527 when 32 then 318 when 33 then 557 when 34 then 735 when 35 then 683 when 36 then 930 when 37 then 707 when 38 then 892 when 39 then 973 when 40 then 477 when 41 then 631 when 42 then 513 when 43 then 469 when 44 then 385 when 45 then 272 when 46 then 324 when 47 then 690 when 48 then 242 when 49 then 940 when 50 then 36 when 51 then 674 when 52 then 74 when 53 then 212 when 54 then 17 when 55 then 163 when 56 then 868 when 57 then 345 when 58 then 120 when 59 then 677 when 60 then 202 when 61 then 335 when 62 then 204 when 63 then 520 when 64 then 891 when 65 then 938 when 66 then 203 when 67 then 822 when 68 then 645 when 69 then 95 when 70 then 795 when 71 then 123 when 72 then 726 when 73 then 308 when 74 then 591 when 75 then 110 when 76 then 581 when 77 then 915 when 78 then 800 when 79 then 823 when 80 then 855 when 81 then 836 when 82 then 496 when 83 then 929 when 84 then 48 when 85 then 513 when 86 then 92 when 87 then 916 when 88 then 858 when 89 then 213 when 90 then 593 when 91 then 60 when 92 then 547 when 93 then 796 when 94 then 581 when 95 then 438 when 96 then 735 when 97 then 783 when 98 then 260 when 99 then 380 when 100 then 878 end AS pos_asset, date, value FROM metric_value WHERE date >= '2016-01-01' and date < '2016-06-01' AND timerange_transaction @> current_timestamp ORDER BY metric_value.id_metric, metric_value.id_asset, date; Thanks again for the suggestions :) I'm still very happy for any ideas on how to get back the 2 seconds longer than it takes without any joins to the dimension tables (3.7 seconds), or explain why the cartesian join helps and/or how we can get the same speedup without materialising it. SELECT id_metric, id_asset, date, value FROM metric_value WHERE date >= '2016-01-01' and date < '2016-06-01' AND timerange_transaction @> current_timestamp ORDER BY date, metric_value.id_metric; Cheers, Chris. --001a1147c326f6a3710552ded0d9 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi Karl,

Thanks for the quick reply! An= swers inline.

My starting point, having executed e= xactly the preparation query in my email, was that the sample EXPLAIN (ANAL= YZE, BUFFERS) SELECT query ran in 15.3 seconds (best of 5), and did two nested loops.

On 24 June 2017 at 03:01, = Karl Czajkowski <karlcz@isi.edu> wrote:
Also, did you in= clude an ANALYZE step between your table creation
statements and your qu= ery benchmarks?=C2=A0 Since you are dropping and
recreating test data, y= ou have no stats on anything.

I tried this = suggestion first, as it's the hardest to undo, and could also be done a= utomatically by a background ANALYZE while I wasn't looking. It did res= ult in a switch to using hash= joins (instead of nested loops), and to starting with the metric_value= table (the fact table), which are both changes that I thought would help, = and the EXPLAIN ... SELECT speeded up to 13.2 seconds (2 seconds faster; be= st of 5 again).

Did you only omit a CREATE INDEX statement on asset_pos (id, pos= ) from
your problem statement or also from your actual tests?=C2=A0 Without any index, you are forcing the query planner to do that join the hard way.
<= /blockquote>

I omitted it from my previous tests and the= preparation script because I didn't expect it to make much difference.= There was already a primary key on ID, so this would only enable an index = scan to be changed into an index-only scan, but the query plan wasn't d= oing an index scan.

It didn't appear to change= the query plan or performance= .

Have you tried adding a foreign key constraint on the id_asset and
id_metric columns?=C2=A0 I wonder if you'd get a better query plan if t= he
DB knew that the inner join would not change the number of result
rows.=C2=A0 I think it's doing the join inside the filter step because<= br> it assumes that the inner join may drop rows.

This didn't appear to change the query plan or performance either.
=C2=A0
<= blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-l= eft:1px solid rgb(204,204,204);padding-left:1ex"> > This is an example of the kind of query we would like to speed up:
>
>
>=C2=A0 =C2=A0 =C2=A0SELECT metric_pos.pos AS pos_metric, asset_pos.pos = AS pos_asset,
>=C2=A0 =C2=A0 =C2=A0date, value
>=C2=A0 =C2=A0 =C2=A0FROM metric_value
>=C2=A0 =C2=A0 =C2=A0INNER JOIN asset_pos ON asset_pos.id =3D metric_value= .id_asset
>=C2=A0 =C2=A0 =C2=A0INNER JOIN metric_pos ON metric_pos.id =3D metric_va= lue.id_metric
>=C2=A0 =C2=A0 =C2=A0WHERE
>=C2=A0 =C2=A0 =C2=A0date >=3D '2016-01-01' and date < = 9;2016-06-01'
>=C2=A0 =C2=A0 =C2=A0AND timerange_transaction @> current_timestamp >=C2=A0 =C2=A0 =C2=A0ORDER BY metric_value.id_metric, metric_value.id_as= set, date
>

How sparse is the typical result set selected by these date and
timerange predicates?=C2=A0 If it is sparse, I'd think you want your compound index to start with those two columns.

I'm not sure what "sparse" means? The date is a sign= ificant fraction (25%) of the total table contents in this test example, al= though we're flexible about date ranges (if it improves performance per= day) since we'll end up processing a big chunk of the entire table any= way, batched by date. Almost no rows will be removed by the timerange_trans= action filter (none in our test example). We expect to have rows in this ta= ble for most metric and asset combinations (in the test example we populate= metric_value using the cartesian product of these tables to simulate this)= .

I created the index starting with date and it di= d make a big difference: down to 10.3 seconds using a bitmap index scan and bitmap heap scan (and th= en two hash joins as before).

I was also able to <= a href=3D"https://explain.depesz.com/s/xTig">shave another 1.1 seconds off<= /a>=C2=A0(down to 9.2 seconds) by materialising the cartesian product of id= _asset and id_metric, and joining to metric_value, but I don't really u= nderstand why this helps. It's unfortunate that this requires materiali= sation (using a subquery isn't enough) and takes more time than it save= s from the query (6 seconds) although it might be partially reusable in our= case.

CREATE TABLE car= tesian AS
SELECT DIS= TINCT id_metric, id_asset FROM metric_value;
=

S= ELECT metric_pos.pos AS pos_metric, asset_pos.pos AS pos_asset, date, value= =C2=A0
FROM cartesi= an
INNER JOIN metric= _value ON metric_value.id_metric =3D cartesian.id_metric AND metric_value.i= d_asset =3D cartesian.id_asset
INNER JOIN asset_pos ON asset_po= s.id =3D metric_value.id_asset
INNER JOIN metric_pos ON me= tric_pos.id =3D metric_value.id_metric
WHERE=C2=A0
date >=3D '2016-01-01' and date < '2016-06= -01'=C2=A0
AND t= imerange_transaction @> current_timestamp=C2=A0
=
ORDER BY metric_value.id_metric, metric_valu= e.id_asset, date;

And I was able = to shave another 3.7 seconds = off (down to 5.6 seconds) by making the only two columns of the cartesi= an table into its primary key, although again I don't understand why:

alter table cartesian add pri= mary key (id_metric, id_asset);

3D"Inline

This uses merge joins instead, which= supports the hypothesis that merge joins could be faster than hash joins i= f only we can persuade Postgres to use them. It also contains two materiali= ze steps that I don't understand.
=C2=A0
Finally, your subject line said you were= joining hundreds of rows to
millions.=C2=A0 In queries where we used a similarly small dimension table<= br> in the WHERE clause, we saw massive speedup by pre-evaluating that
dimension query to produce an array of keys, the in-lining the actual
key constants in the where clause of a main fact table query that
no longer had the join in it.

In your case, the equivalent hack would be to compile the small
dimension tables into big CASE statements I suppose...

Nice idea! I tried this but unfortunately it made the query= 16 seconds slower=C2=A0(= up to 22 seconds) instead of faster. I'm not sure why, perhaps the CASE= expression is just very slow to evaluate?

=
SELECT
case metric_value.id_metric when 1 then 565 =C2=A0when 2 then 422 = =C2=A0when 3 then 798 =C2=A0when 4 then 161 =C2=A0when 5 then 853 =C2=A0whe= n 6 then 994 =C2=A0when 7 then 869 =C2=A0when 8 then 909 =C2=A0when 9 then = 226 =C2=A0when 10 then 32 =C2=A0when 11
=C2=A0then 592 =C2=A0when 12 then 247 =C2=A0when 13 the= n 350 =C2=A0when 14 then 964 =C2=A0when 15 then 692 =C2=A0when 16 then 759 = =C2=A0when 17 then 744 =C2=A0when 18 then 192 =C2=A0when 19 then 390 =C2=A0= when 20 then 804 =C2=A0when 21 then 892 =C2=A0when 22 then 219 =C2=A0when 2= 3 then 48 =C2=A0when 24 then 272 =C2=A0when 25 then 256 =C2=A0when 26 then = 955 =C2=A0when 27 then 258 =C2=A0when 28 then 858 =C2=A0when 29 then 298 = =C2=A0when 30 then 200 =C2=A0when 31 then 681 =C2=A0when 32 then 862=
=C2=A0 when 33 then 621 = =C2=A0when 34 then 478 =C2=A0when 35 then 23 =C2=A0when 36 then 474 =C2=A0w= hen 37 then 472 =C2=A0when 38 then 892 =C2=A0when 39 then 383 =C2=A0when 40= then 699 =C2=A0when 41 then 924 =C2=A0when 42 then 976 =C2=A0when 43 then<= /font>
=C2=A0946 =C2=A0when= 44 then 275 =C2=A0when 45 then 940 =C2=A0when 46 then 637 =C2=A0when 47 th= en 34 =C2=A0when 48 then 684 =C2=A0when 49 then 829 =C2=A0when 50 then 423 = =C2=A0when 51 then 487 =C2=A0when 52 then 721 =C2=A0when 53 then 642 =C2=A0= when 54
then 535 =C2= =A0when 55 then 992 =C2=A0when 56 then 898 =C2=A0when 57 then 490 =C2=A0whe= n 58 then 251 =C2=A0when 59 then 756 =C2=A0when 60 then 788 =C2=A0when 61 t= hen 451 =C2=A0when 62 then 437 =C2=A0when 63 then 650 =C2=A0when 64 then 72= =C2=A0when
=C2=A065= then 915 =C2=A0when 66 then 673 =C2=A0when 67 then 546 =C2=A0when 68 then = 387 =C2=A0when 69 then 565 =C2=A0when 70 then 929 =C2=A0when 71 then 86 =C2= =A0when 72 then 490 =C2=A0when 73 then 905 =C2=A0when 74 then 32 =C2=A0when= 75 then 764 =C2=A0when 76 then 845 =C2=A0when 77 then 669 =C2=A0when 78 th= en 798 =C2=A0when 79 then 529 =C2=A0when 80 then 498 =C2=A0when 81 then 221= =C2=A0when 82 then 16 =C2=A0when 83 then 219 =C2=A0when 84 then 864 =C2=A0= when 85 then 551 =C2=A0when 86 then 211 =C2=A0when 87 then 762 =C2=A0when 8= 8 then 42 =C2=A0when 89 then 462 =C2=A0when 90 then 518 =C2=A0when 91 then = 830 =C2=A0when 92 then 912 =C2=A0when 93 then 954 =C2=A0when 94 then 480 = =C2=A0when 95 then 984 =C2=A0when 96 then 869 =C2=A0when 97 then 153 =C2=A0= when 98 then 530 =C2=A0when 99 then 257 =C2=A0when 100 then 718 =C2=A0end A= S pos_metric,
case metric_value.id_as= set when 1 then 460 =C2=A0when 2 then 342 =C2=A0when 3 then 208 =C2=A0when = 4 then 365 =C2=A0when 5 then 374 =C2=A0when 6 then 972 =C2=A0when 7 then 21= 0 =C2=A0when 8 then 43 =C2=A0when 9 then 770 =C2=A0when 10 then 738 =C2=A0w= hen 11
then 540 =C2= =A0when 12 then 991 =C2=A0when 13 then 754 =C2=A0when 14 then 759 =C2=A0whe= n 15 then 855 =C2=A0when 16 then 305 =C2=A0when 17 then 970 =C2=A0when 18 t= hen 617 =C2=A0when 19 then 347 =C2=A0when 20 then 431 =C2=A0when 21 then 13= 4 =C2=A0when 22 then 176 =C2=A0when 23 then 343 =C2=A0when 24 then 88 =C2= =A0when 25 then 656 =C2=A0when 26 then 328 =C2=A0when 27 then 958 =C2=A0whe= n 28 then 809 =C2=A0when 29 then 858 =C2=A0when 30 then 214 =C2=A0when 31 t= hen 527 =C2=A0when 32 then 318
=C2=A0when 33 then 557 =C2=A0when 34 then 735 =C2=A0when 35 then= 683 =C2=A0when 36 then 930 =C2=A0when 37 then 707 =C2=A0when 38 then 892 = =C2=A0when 39 then 973 =C2=A0when 40 then 477 =C2=A0when 41 then 631 =C2=A0= when 42 then 513 =C2=A0when 43 then
=C2=A0469 =C2=A0when 44 then 385 =C2=A0when 45 then 272 =C2= =A0when 46 then 324 =C2=A0when 47 then 690 =C2=A0when 48 then 242 =C2=A0whe= n 49 then 940 =C2=A0when 50 then 36 =C2=A0when 51 then 674 =C2=A0when 52 th= en 74 =C2=A0when 53 then 212 =C2=A0when 54 then 17 =C2=A0when 55 then 163 = =C2=A0when 56 then 868 =C2=A0when 57 then 345 =C2=A0when 58 then 120 =C2=A0= when 59 then 677 =C2=A0when 60 then 202 =C2=A0when 61 then 335 =C2=A0when 6= 2 then 204 =C2=A0when 63 then 520 =C2=A0when 64 then 891 =C2=A0when<= /div>
65 then 938 =C2=A0when 66 t= hen 203 =C2=A0when 67 then 822 =C2=A0when 68 then 645 =C2=A0when 69 then 95= =C2=A0when 70 then 795 =C2=A0when 71 then 123 =C2=A0when 72 then 726 =C2= =A0when 73 then 308 =C2=A0when 74 then 591 =C2=A0when 75 then 110 =C2=A0whe= n 76 then 581 =C2=A0when 77 then 915 =C2=A0when 78 then 800 =C2=A0when 79 t= hen 823 =C2=A0when 80 then 855 =C2=A0when 81 then 836 =C2=A0when 82 then 49= 6 =C2=A0when 83 then 929 =C2=A0when 84 then 48 =C2=A0when 85 then 513 =C2= =A0when 86 then 92
= =C2=A0 when 87 then 916 =C2=A0when 88 then 858 =C2=A0when 89 then 213 =C2= =A0when 90 then 593 =C2=A0when 91 then 60 =C2=A0when 92 then 547 =C2=A0when= 93 then 796 =C2=A0when 94 then 581 =C2=A0when 95 then 438 =C2=A0when 96 th= en 735 =C2=A0when 97 then
=C2=A0783 =C2=A0when 98 then 260 =C2=A0when 99 then 380 =C2=A0when 10= 0 then 878 =C2=A0end AS pos_asset,

=
da= te, value
FROM metri= c_value
WHERE=
date >=3D '2016-01-= 01' and date < '2016-06-01'
AND timerange_transaction @> current_timestamp
ORDER BY metric_value.= id_metric, metric_value.id_asset, date;

Thanks again for the suggestions :) I'm still very happy for any= ideas on how to get back the 2 seconds longer than it takes without any joins to the dimension tabl= es (3.7 seconds), or explain why the cartesian join helps and/or how we can= get the same speedup without materialising it.

<= /div>
SELECT id_metric, id_asset, date, value
FROM metric_value
=
WHERE
date >=3D '2016-01-01' and date < '= ;2016-06-01'
<= div class=3D"gmail_quote">
AND= timerange_transaction @> current_timestamp
ORDER BY date, metric_value.id_metric;

Cheers, Chris.
--001a1147c326f6a3710552ded0d9-- --001a1147c326f6a3740552ded0da Content-Type: image/png; name="image.png" Content-Disposition: inline; filename="image.png" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: ii_15ce4a7cba4855e9 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 TkSuQmCC --001a1147c326f6a3740552ded0da--