Re: possibilities for SQL optimization

From: Olivier Gautherot <ogautherot(at)gautherot(dot)net>
To: Chris Stephens <cstephens16(at)gmail(dot)com>
Cc: Pavel Stehule <pavel(dot)stehule(at)gmail(dot)com>, "pgsql-general(at)postgresql(dot)org >> PG-General Mailing List" <pgsql-general(at)postgresql(dot)org>
Subject: Re: possibilities for SQL optimization
Date: 2020-04-16 15:20:48
Message-ID: CAJ7S9TUuVznLkrMsbuQ8_EBeoJZxAY7S92192dnpUr1EBdRhRg@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Hi Chris,

40ms for a select on 302 millions rows sounds reasonable. What I would try
to do is group by binary patterns on pixelId to reduce the number of cases
(use some arithmetics) and use a calculated index but I'm not sure of how
much you would save.

On Thu, Apr 16, 2020 at 4:57 PM Chris Stephens <cstephens16(at)gmail(dot)com>
wrote:

> disastrous :)
>
> Planning Time: 7.569 ms
> Execution Time: 316969.474 ms
>
> On Thu, Apr 16, 2020 at 9:23 AM Pavel Stehule <pavel(dot)stehule(at)gmail(dot)com>
> wrote:
>
>>
>>
>> čt 16. 4. 2020 v 16:08 odesílatel Chris Stephens <cstephens16(at)gmail(dot)com>
>> napsal:
>>
>>> PG12
>>> RHEL 8
>>>
>>> I suspect there's little I can do to get the following query to run
>>> faster/more efficiently but thought I'd post to list and confirm.
>>>
>>> Caveat: I'm coming from an Oracle background and am extremely wet behind
>>> ears w/ respect to postgresql (please be kind :)).
>>>
>>> Right now, we can't change the software generating the SQL though that
>>> is very possible/likely in the future. For now, the query is what it is. I
>>> can alter indexing, add table partitioning, or anything else that doesn't
>>> change logical structure of table.
>>>
>>> This is a very wide table holding astronomical data which will be used
>>> to track changes in the sky to generate alerts for astronomers to evaluate.
>>> The query has a variable number of "pixelId BETWEEN" predicates. As data
>>> volume in DiaSource increases, performance of query decreases. I need to
>>> confirm this but I suspect the primary reason for the decreased performance
>>> is increased number of "pixelId BETWEEN" predicates generated by
>>> application. Predicate count is the only thing that changes. I don't think
>>> performance would otherwise degrade given execution plan.
>>>
>>> [local] xxxx(at)zzzzz=# \dS+ "DiaSource"
>>> Table
>>> "public.DiaSource"
>>> Column | Type | Collation |
>>> Nullable | Default | Storage | Stats target | Description
>>>
>>> -----------------------------+-----------------------------+-----------+----------+-----------------------+---------+--------------+-------------
>>> diaSourceId | bigint | |
>>> not null | '0'::bigint | plain | |
>>> ccdVisitId | bigint | |
>>> not null | '0'::bigint | plain | |
>>> diaObjectId | bigint | |
>>> | '0'::bigint | plain | |
>>> ssObjectId | bigint | |
>>> | '0'::bigint | plain | |
>>> parentDiaSourceId | bigint | |
>>> | '0'::bigint | plain | |
>>> prv_procOrder | integer | |
>>> not null | 0 | plain | |
>>> ssObjectReassocTime | timestamp without time zone | |
>>> | | plain | |
>>> midPointTai | double precision | |
>>> not null | '0'::double precision | plain | |
>>> ra | double precision | |
>>> not null | '0'::double precision | plain | |
>>> raSigma | double precision | |
>>> not null | '0'::double precision | plain | |
>>> decl | double precision | |
>>> not null | '0'::double precision | plain | |
>>> declSigma | double precision | |
>>> not null | '0'::double precision | plain | |
>>> ra_decl_Cov | double precision | |
>>> not null | '0'::double precision | plain | |
>>> x | double precision | |
>>> not null | '0'::double precision | plain | |
>>> xSigma | double precision | |
>>> not null | '0'::double precision | plain | |
>>> y | double precision | |
>>> not null | '0'::double precision | plain | |
>>> ySigma | double precision | |
>>> not null | '0'::double precision | plain | |
>>> x_y_Cov | double precision | |
>>> not null | '0'::double precision | plain | |
>>> apFlux | double precision | |
>>> not null | '0'::double precision | plain | |
>>> apFluxErr | double precision | |
>>> not null | '0'::double precision | plain | |
>>> snr | double precision | |
>>> not null | '0'::double precision | plain | |
>>> psFlux | double precision | |
>>> | '0'::double precision | plain | |
>>> psFluxSigma | double precision | |
>>> | '0'::double precision | plain | |
>>> psRa | double precision | |
>>> | '0'::double precision | plain | |
>>> psRaSigma | double precision | |
>>> | '0'::double precision | plain | |
>>> psDecl | double precision | |
>>> | '0'::double precision | plain | |
>>> psDeclSigma | double precision | |
>>> | '0'::double precision | plain | |
>>> psFlux_psRa_Cov | double precision | |
>>> | '0'::double precision | plain | |
>>> psFlux_psDecl_Cov | double precision | |
>>> | '0'::double precision | plain | |
>>> psRa_psDecl_Cov | double precision | |
>>> | '0'::double precision | plain | |
>>> psLnL | double precision | |
>>> | '0'::double precision | plain | |
>>> psChi2 | double precision | |
>>> | '0'::double precision | plain | |
>>> psNdata | integer | |
>>> | 0 | plain | |
>>> trailFlux | double precision | |
>>> | '0'::double precision | plain | |
>>> trailFluxSigma | double precision | |
>>> | '0'::double precision | plain | |
>>> trailRa | double precision | |
>>> | '0'::double precision | plain | |
>>> trailRaSigma | double precision | |
>>> | '0'::double precision | plain | |
>>> trailDecl | double precision | |
>>> | '0'::double precision | plain | |
>>> trailDeclSigma | double precision | |
>>> | '0'::double precision | plain | |
>>> trailLength | double precision | |
>>> | '0'::double precision | plain | |
>>> trailLengthSigma | double precision | |
>>> | '0'::double precision | plain | |
>>> trailAngle | double precision | |
>>> | '0'::double precision | plain | |
>>> trailAngleSigma | double precision | |
>>> | '0'::double precision | plain | |
>>> trailFlux_trailRa_Cov | double precision | |
>>> | '0'::double precision | plain | |
>>> trailFlux_trailDecl_Cov | double precision | |
>>> | '0'::double precision | plain | |
>>> trailFlux_trailLength_Cov | double precision | |
>>> | '0'::double precision | plain | |
>>> trailFlux_trailAngle_Cov | double precision | |
>>> | '0'::double precision | plain | |
>>> trailRa_trailDecl_Cov | double precision | |
>>> | '0'::double precision | plain | |
>>> trailRa_trailLength_Cov | double precision | |
>>> | '0'::double precision | plain | |
>>> trailRa_trailAngle_Cov | double precision | |
>>> | '0'::double precision | plain | |
>>> trailDecl_trailLength_Cov | double precision | |
>>> | '0'::double precision | plain | |
>>> trailDecl_trailAngle_Cov | double precision | |
>>> | '0'::double precision | plain | |
>>> trailLength_trailAngle_Cov | double precision | |
>>> | '0'::double precision | plain | |
>>> trailLnL | double precision | |
>>> | '0'::double precision | plain | |
>>> trailChi2 | double precision | |
>>> | '0'::double precision | plain | |
>>> trailNdata | integer | |
>>> | 0 | plain | |
>>> dipMeanFlux | double precision | |
>>> | '0'::double precision | plain | |
>>> dipMeanFluxSigma | double precision | |
>>> | '0'::double precision | plain | |
>>> dipFluxDiff | double precision | |
>>> | '0'::double precision | plain | |
>>> dipFluxDiffSigma | double precision | |
>>> | '0'::double precision | plain | |
>>> dipRa | double precision | |
>>> | '0'::double precision | plain | |
>>> dipRaSigma | double precision | |
>>> | '0'::double precision | plain | |
>>> dipDecl | double precision | |
>>> | '0'::double precision | plain | |
>>> dipDeclSigma | double precision | |
>>> | '0'::double precision | plain | |
>>> dipLength | double precision | |
>>> | '0'::double precision | plain | |
>>> dipLengthSigma | double precision | |
>>> | '0'::double precision | plain | |
>>> dipAngle | double precision | |
>>> | '0'::double precision | plain | |
>>> dipAngleSigma | double precision | |
>>> | '0'::double precision | plain | |
>>> dipMeanFlux_dipFluxDiff_Cov | double precision | |
>>> | '0'::double precision | plain | |
>>> dipMeanFlux_dipRa_Cov | double precision | |
>>> | '0'::double precision | plain | |
>>> dipMeanFlux_dipDecl_Cov | double precision | |
>>> | '0'::double precision | plain | |
>>> dipMeanFlux_dipLength_Cov | double precision | |
>>> | '0'::double precision | plain | |
>>> dipMeanFlux_dipAngle_Cov | double precision | |
>>> | '0'::double precision | plain | |
>>> dipFluxDiff_dipRa_Cov | double precision | |
>>> | '0'::double precision | plain | |
>>> dipFluxDiff_dipDecl_Cov | double precision | |
>>> | '0'::double precision | plain | |
>>> dipFluxDiff_dipLength_Cov | double precision | |
>>> | '0'::double precision | plain | |
>>> dipFluxDiff_dipAngle_Cov | double precision | |
>>> | '0'::double precision | plain | |
>>> dipRa_dipDecl_Cov | double precision | |
>>> | '0'::double precision | plain | |
>>> dipRa_dipLength_Cov | double precision | |
>>> | '0'::double precision | plain | |
>>> dipRa_dipAngle_Cov | double precision | |
>>> | '0'::double precision | plain | |
>>> dipDecl_dipLength_Cov | double precision | |
>>> | '0'::double precision | plain | |
>>> dipDecl_dipAngle_Cov | double precision | |
>>> | '0'::double precision | plain | |
>>> dipLength_dipAngle_Cov | double precision | |
>>> | '0'::double precision | plain | |
>>> dipLnL | double precision | |
>>> | '0'::double precision | plain | |
>>> dipChi2 | double precision | |
>>> | '0'::double precision | plain | |
>>> dipNdata | integer | |
>>> | 0 | plain | |
>>> totFlux | double precision | |
>>> | '0'::double precision | plain | |
>>> totFluxErr | double precision | |
>>> | '0'::double precision | plain | |
>>> diffFlux | double precision | |
>>> | '0'::double precision | plain | |
>>> diffFluxErr | double precision | |
>>> | '0'::double precision | plain | |
>>> fpBkgd | double precision | |
>>> | '0'::double precision | plain | |
>>> fpBkgdErr | double precision | |
>>> | '0'::double precision | plain | |
>>> ixx | double precision | |
>>> | '0'::double precision | plain | |
>>> ixxSigma | double precision | |
>>> | '0'::double precision | plain | |
>>> iyy | double precision | |
>>> | '0'::double precision | plain | |
>>> iyySigma | double precision | |
>>> | '0'::double precision | plain | |
>>> ixy | double precision | |
>>> | '0'::double precision | plain | |
>>> ixySigma | double precision | |
>>> | '0'::double precision | plain | |
>>> ixx_iyy_Cov | double precision | |
>>> | '0'::double precision | plain | |
>>> ixx_ixy_Cov | double precision | |
>>> | '0'::double precision | plain | |
>>> iyy_ixy_Cov | double precision | |
>>> | '0'::double precision | plain | |
>>> ixxPSF | double precision | |
>>> | '0'::double precision | plain | |
>>> iyyPSF | double precision | |
>>> | '0'::double precision | plain | |
>>> ixyPSF | double precision | |
>>> | '0'::double precision | plain | |
>>> extendedness | double precision | |
>>> | '0'::double precision | plain | |
>>> spuriousness | double precision | |
>>> | '0'::double precision | plain | |
>>> flags | bigint | |
>>> not null | '0'::bigint | plain | |
>>> pixelId | bigint | |
>>> not null | '0'::bigint | plain | |
>>> Indexes:
>>> "PK_DiaSource" PRIMARY KEY, btree ("diaSourceId")
>>> "IDX_DiaSource_ccdVisitId" btree ("ccdVisitId")
>>> "IDX_DiaSource_diaObjId" btree ("diaObjectId")
>>> "IDX_DiaSource_htmId20" btree ("pixelId")
>>> "IDX_DiaSource_ssObjId" btree ("ssObjectId")
>>> Access method: heap
>>>
>>> explain analyze SELECT "DiaSource"."diaSourceId",
>>> "DiaSource"."ccdVisitId", "DiaSource"."diaObjectId",
>>> "DiaSource"."ssObjectId", "DiaSource"."parentDiaSourceId",
>>> "DiaSource"."prv_procOrder", "DiaSource"."ssObjectReassocTime",
>>> "DiaSource"."midPointTai", "DiaSource".ra, "DiaSource"."raSigma",
>>> "DiaSource".decl, "DiaSource"."declSigma", "DiaSource"."ra_decl_Cov",
>>> "DiaSource".x, "DiaSource"."xSigma", "DiaSource".y, "DiaSource"."ySigma",
>>> "DiaSource"."x_y_Cov", "DiaSource"."apFlux", "DiaSource"."apFluxErr",
>>> "DiaSource".snr, "DiaSource"."psFlux", "DiaSource"."psFluxSigma",
>>> "DiaSource"."psRa", "DiaSource"."psRaSigma", "DiaSource"."psDecl",
>>> "DiaSource"."psDeclSigma", "DiaSource"."psFlux_psRa_Cov",
>>> "DiaSource"."psFlux_psDecl_Cov", "DiaSource"."psRa_psDecl_Cov",
>>> "DiaSource"."psLnL", "DiaSource"."psChi2", "DiaSource"."psNdata",
>>> "DiaSource"."trailFlux", "DiaSource"."trailFluxSigma",
>>> "DiaSource"."trailRa", "DiaSource"."trailRaSigma", "DiaSource"."trailDecl",
>>> "DiaSource"."trailDeclSigma", "DiaSource"."trailLength",
>>> "DiaSource"."trailLengthSigma", "DiaSource"."trailAngle",
>>> "DiaSource"."trailAngleSigma", "DiaSource"."trailFlux_trailRa_Cov",
>>> "DiaSource"."trailFlux_trailDecl_Cov",
>>> "DiaSource"."trailFlux_trailLength_Cov",
>>> "DiaSource"."trailFlux_trailAngle_Cov",
>>> "DiaSource"."trailRa_trailDecl_Cov", "DiaSource"."trailRa_trailLength_Cov",
>>> "DiaSource"."trailRa_trailAngle_Cov",
>>> "DiaSource"."trailDecl_trailLength_Cov",
>>> "DiaSource"."trailDecl_trailAngle_Cov",
>>> "DiaSource"."trailLength_trailAngle_Cov", "DiaSource"."trailLnL",
>>> "DiaSource"."trailChi2", "DiaSource"."trailNdata",
>>> "DiaSource"."dipMeanFlux", "DiaSource"."dipMeanFluxSigma",
>>> "DiaSource"."dipFluxDiff", "DiaSource"."dipFluxDiffSigma",
>>> "DiaSource"."dipRa", "DiaSource"."dipRaSigma", "DiaSource"."dipDecl",
>>> "DiaSource"."dipDeclSigma", "DiaSource"."dipLength",
>>> "DiaSource"."dipLengthSigma", "DiaSource"."dipAngle",
>>> "DiaSource"."dipAngleSigma", "DiaSource"."dipMeanFlux_dipFluxDiff_Cov",
>>> "DiaSource"."dipMeanFlux_dipRa_Cov", "DiaSource"."dipMeanFlux_dipDecl_Cov",
>>> "DiaSource"."dipMeanFlux_dipLength_Cov",
>>> "DiaSource"."dipMeanFlux_dipAngle_Cov",
>>> "DiaSource"."dipFluxDiff_dipRa_Cov", "DiaSource"."dipFluxDiff_dipDecl_Cov",
>>> "DiaSource"."dipFluxDiff_dipLength_Cov",
>>> "DiaSource"."dipFluxDiff_dipAngle_Cov", "DiaSource"."dipRa_dipDecl_Cov",
>>> "DiaSource"."dipRa_dipLength_Cov", "DiaSource"."dipRa_dipAngle_Cov",
>>> "DiaSource"."dipDecl_dipLength_Cov", "DiaSource"."dipDecl_dipAngle_Cov",
>>> "DiaSource"."dipLength_dipAngle_Cov", "DiaSource"."dipLnL",
>>> "DiaSource"."dipChi2", "DiaSource"."dipNdata", "DiaSource"."totFlux",
>>> "DiaSource"."totFluxErr", "DiaSource"."diffFlux",
>>> "DiaSource"."diffFluxErr", "DiaSource"."fpBkgd", "DiaSource"."fpBkgdErr",
>>> "DiaSource".ixx, "DiaSource"."ixxSigma", "DiaSource".iyy,
>>> "DiaSource"."iyySigma", "DiaSource".ixy, "DiaSource"."ixySigma",
>>> "DiaSource"."ixx_iyy_Cov", "DiaSource"."ixx_ixy_Cov",
>>> "DiaSource"."iyy_ixy_Cov", "DiaSource"."ixxPSF", "DiaSource"."iyyPSF",
>>> "DiaSource"."ixyPSF", "DiaSource".extendedness, "DiaSource".spuriousness,
>>> "DiaSource".flags, "DiaSource"."pixelId" FROM "DiaSource" WHERE
>>> "DiaSource"."pixelId" BETWEEN 10729436479488 AND 10729440673791 OR
>>> "DiaSource"."pixelId" BETWEEN 10729449062400 AND 10729499394047 OR
>>> "DiaSource"."pixelId" BETWEEN 10729532948480 AND 10729537142783 OR
>>> "DiaSource"."pixelId" BETWEEN 10729542385664 AND 10729542451199 OR
>>> "DiaSource"."pixelId" BETWEEN 10729542516736 AND 10729542647807 OR
>>> "DiaSource"."pixelId" BETWEEN 10729546579968 AND 10729546711039 OR
>>> "DiaSource"."pixelId" BETWEEN 10729546776576 AND 10729546842111 OR
>>> "DiaSource"."pixelId" BETWEEN 10729566502912 AND 10729570697215 OR
>>> "DiaSource"."pixelId" BETWEEN 10729570959360 AND 10729571090431 OR
>>> "DiaSource"."pixelId" BETWEEN 10729571155968 AND 10729571221503 OR
>>> "DiaSource"."pixelId" BETWEEN 10729571745792 AND 10729573056511 OR
>>> "DiaSource"."pixelId" BETWEEN 10729573122048 AND 10729574105087 OR
>>> "DiaSource"."pixelId" BETWEEN 10729574170624 AND 10729583280127 OR
>>> "DiaSource"."pixelId" BETWEEN 10729601105920 AND 10729601171455 OR
>>> "DiaSource"."pixelId" BETWEEN 10729604251648 AND 10729608445951 OR
>>> "DiaSource"."pixelId" BETWEEN 10729613164544 AND 10729613295615 OR
>>> "DiaSource"."pixelId" BETWEEN 10729613361152 AND 10729613426687 OR
>>> "DiaSource"."pixelId" BETWEEN 10729614737408 AND 10729614868479 OR
>>> "DiaSource"."pixelId" BETWEEN 10729614934016 AND 10729615065087 OR
>>> "DiaSource"."pixelId" BETWEEN 10729615130624 AND 10729615261695 OR
>>> "DiaSource"."pixelId" BETWEEN 10729615654912 AND 10729615720447 OR
>>> "DiaSource"."pixelId" BETWEEN 10729616048128 AND 10729616113663 OR
>>> "DiaSource"."pixelId" BETWEEN 10729621028864 AND 10729625223167 OR
>>> "DiaSource"."pixelId" BETWEEN 10729625747456 AND 10729625812991 OR
>>> "DiaSource"."pixelId" BETWEEN 10729625878528 AND 10729626009599 OR
>>> "DiaSource"."pixelId" BETWEEN 10729626337280 AND 10729626796031 OR
>>> "DiaSource"."pixelId" BETWEEN 10729626861568 AND 10729628893183 OR
>>> "DiaSource"."pixelId" BETWEEN 10729628958720 AND 10729630466047 OR
>>> "DiaSource"."pixelId" BETWEEN 10729630597120 AND 10729630662655 OR
>>> "DiaSource"."pixelId" BETWEEN 10729630793728 AND 10729630859263 OR
>>> "DiaSource"."pixelId" BETWEEN 10729630990336 AND 10729631383551 OR
>>> "DiaSource"."pixelId" BETWEEN 10729631449088 AND 10729633611775 OR
>>> "DiaSource"."pixelId" BETWEEN 10729650388992 AND 10729650651135 OR
>>> "DiaSource"."pixelId" BETWEEN 10729650716672 AND 10729651437567 OR
>>> "DiaSource"."pixelId" BETWEEN 10729652748288 AND 10729653010431 OR
>>> "DiaSource"."pixelId" BETWEEN 10729653141504 AND 10729653207039 OR
>>> "DiaSource"."pixelId" BETWEEN 10729653272576 AND 10729653338111 OR
>>> "DiaSource"."pixelId" BETWEEN 10729653600256 AND 10729653665791 OR
>>> "DiaSource"."pixelId" BETWEEN 10729653796864 AND 10729654059007 OR
>>> "DiaSource"."pixelId" BETWEEN 10729654190080 AND 10729654255615 OR
>>> "DiaSource"."pixelId" BETWEEN 10729654321152 AND 10729654386687 OR
>>> "DiaSource"."pixelId" BETWEEN 10729654452224 AND 10729654583295 OR
>>> "DiaSource"."pixelId" BETWEEN 10729734275072 AND 10729734799359 OR
>>> "DiaSource"."pixelId" BETWEEN 10729735061504 AND 10729735585791 OR
>>> "DiaSource"."pixelId" BETWEEN 10729735847936 AND 10729736372223 OR
>>> "DiaSource"."pixelId" BETWEEN 10729737945088 AND 10729738207231 OR
>>> "DiaSource"."pixelId" BETWEEN 10729738993664 AND 10729739124735 OR
>>> "DiaSource"."pixelId" BETWEEN 10729739190272 AND 10729739255807 OR
>>> "DiaSource"."pixelId" BETWEEN 10729740566528 AND 10729740697599 OR
>>> "DiaSource"."pixelId" BETWEEN 10729740763136 AND 10729740894207 OR
>>> "DiaSource"."pixelId" BETWEEN 10729740959744 AND 10729741090815 OR
>>> "DiaSource"."pixelId" BETWEEN 10729741484032 AND 10729741549567 OR
>>> "DiaSource"."pixelId" BETWEEN 10729741877248 AND 10729741942783 OR
>>> "DiaSource"."pixelId" BETWEEN 10729748955136 AND 10729749020671 OR
>>> "DiaSource"."pixelId" BETWEEN 10729868492800 AND 10729868754943 OR
>>> "DiaSource"."pixelId" BETWEEN 10729869082624 AND 10729869148159 OR
>>> "DiaSource"."pixelId" BETWEEN 10729869344768 AND 10729869410303 OR
>>> "DiaSource"."pixelId" BETWEEN 10776494538752 AND 10776494604287;
>>>
>>> Bitmap Heap Scan on "DiaSource" (cost=541.17..33856.16 rows=7831
>>> width=848) (actual time=2.108..39.744 rows=8524 loops=1)
>>> Recheck Cond: ((("pixelId" >= '10729436479488'::bigint) AND
>>> ("pixelId" <= '10729440673791'::bigint)) OR (("pixelId" >=
>>> '10729449062400'::bigint) AND ("pixelId" <= '10729499394047'::bigint)) OR
>>> (("pixelId" >=
>>> '10729532948480'::bigint) AND ("pixelId" <= '10729537142783'::bigint))
>>> OR (("pixelId" >= '10729542385664'::bigint) AND ("pixelId" <=
>>> '10729542451199'::bigint)) OR (("pixelId" >= '10729542516736'::bigint) AND (
>>> "pixelId" <= '10729542647807'::bigint)) OR (("pixelId" >=
>>> '10729546579968'::bigint) AND ("pixelId" <= '10729546711039'::bigint)) OR
>>> (("pixelId" >= '10729546776576'::bigint) AND ("pixelId" <=
>>> '10729546842111'::b
>>> igint)) OR (("pixelId" >= '10729566502912'::bigint) AND ("pixelId" <=
>>> '10729570697215'::bigint)) OR (("pixelId" >= '10729570959360'::bigint) AND
>>> ("pixelId" <= '10729571090431'::bigint)) OR (("pixelId" >= '10729
>>> 571155968'::bigint) AND ("pixelId" <= '10729571221503'::bigint)) OR
>>> (("pixelId" >= '10729571745792'::bigint) AND ("pixelId" <=
>>> '10729573056511'::bigint)) OR (("pixelId" >= '10729573122048'::bigint) AND
>>> ("pixelI
>>> d" <= '10729574105087'::bigint)) OR (("pixelId" >=
>>> '10729574170624'::bigint) AND ("pixelId" <= '10729583280127'::bigint)) OR
>>> (("pixelId" >= '10729601105920'::bigint) AND ("pixelId" <=
>>> '10729601171455'::bigint))
>>> OR (("pixelId" >= '10729604251648'::bigint) AND ("pixelId" <=
>>> '10729608445951'::bigint)) OR (("pixelId" >= '10729613164544'::bigint) AND
>>> ("pixelId" <= '10729613295615'::bigint)) OR (("pixelId" >= '107296133611
>>> 52'::bigint) AND ("pixelId" <= '10729613426687'::bigint)) OR (("pixelId"
>>> >= '10729614737408'::bigint) AND ("pixelId" <= '10729614868479'::bigint))
>>> OR (("pixelId" >= '10729614934016'::bigint) AND ("pixelId" <= '
>>> 10729615065087'::bigint)) OR (("pixelId" >= '10729615130624'::bigint)
>>> AND ("pixelId" <= '10729615261695'::bigint)) OR (("pixelId" >=
>>> '10729615654912'::bigint) AND ("pixelId" <= '10729615720447'::bigint)) OR
>>> (("
>>> pixelId" >= '10729616048128'::bigint) AND ("pixelId" <=
>>> '10729616113663'::bigint)) OR (("pixelId" >= '10729621028864'::bigint) AND
>>> ("pixelId" <= '10729625223167'::bigint)) OR (("pixelId" >=
>>> '10729625747456'::bi
>>> gint) AND ("pixelId" <= '10729625812991'::bigint)) OR (("pixelId" >=
>>> '10729625878528'::bigint) AND ("pixelId" <= '10729626009599'::bigint)) OR
>>> (("pixelId" >= '10729626337280'::bigint) AND ("pixelId" <= '1072962
>>> 6796031'::bigint)) OR (("pixelId" >= '10729626861568'::bigint) AND
>>> ("pixelId" <= '10729628893183'::bigint)) OR (("pixelId" >=
>>> '10729628958720'::bigint) AND ("pixelId" <= '10729630466047'::bigint)) OR
>>> (("pixelId
>>> " >= '10729630597120'::bigint) AND ("pixelId" <=
>>> '10729630662655'::bigint)) OR (("pixelId" >= '10729630793728'::bigint) AND
>>> ("pixelId" <= '10729630859263'::bigint)) OR (("pixelId" >=
>>> '10729630990336'::bigint) A
>>> ND ("pixelId" <= '10729631383551'::bigint)) OR (("pixelId" >=
>>> '10729631449088'::bigint) AND ("pixelId" <= '10729633611775'::bigint)) OR
>>> (("pixelId" >= '10729650388992'::bigint) AND ("pixelId" <= '10729650651135
>>> '::bigint)) OR (("pixelId" >= '10729650716672'::bigint) AND ("pixelId"
>>> <= '10729651437567'::bigint)) OR (("pixelId" >= '10729652748288'::bigint)
>>> AND ("pixelId" <= '10729653010431'::bigint)) OR (("pixelId" >= '1
>>> 0729653141504'::bigint) AND ("pixelId" <= '10729653207039'::bigint)) OR
>>> (("pixelId" >= '10729653272576'::bigint) AND ("pixelId" <=
>>> '10729653338111'::bigint)) OR (("pixelId" >= '10729653600256'::bigint) AND
>>> ("pi
>>> xelId" <= '10729653665791'::bigint)) OR (("pixelId" >=
>>> '10729653796864'::bigint) AND ("pixelId" <= '10729654059007'::bigint)) OR
>>> (("pixelId" >= '10729654190080'::bigint) AND ("pixelId" <=
>>> '10729654255615'::bigi
>>> nt)) OR (("pixelId" >= '10729654321152'::bigint) AND ("pixelId" <=
>>> '10729654386687'::bigint)) OR (("pixelId" >= '10729654452224'::bigint) AND
>>> ("pixelId" <= '10729654583295'::bigint)) OR (("pixelId" >= '10729734
>>> 275072'::bigint) AND ("pixelId" <= '10729734799359'::bigint)) OR
>>> (("pixelId" >= '10729735061504'::bigint) AND ("pixelId" <=
>>> '10729735585791'::bigint)) OR (("pixelId" >= '10729735847936'::bigint) AND
>>> ("pixelId"
>>> <= '10729736372223'::bigint)) OR (("pixelId" >=
>>> '10729737945088'::bigint) AND ("pixelId" <= '10729738207231'::bigint)) OR
>>> (("pixelId" >= '10729738993664'::bigint) AND ("pixelId" <=
>>> '10729739124735'::bigint)) OR
>>> (("pixelId" >= '10729739190272'::bigint) AND ("pixelId" <=
>>> '10729739255807'::bigint)) OR (("pixelId" >= '10729740566528'::bigint) AND
>>> ("pixelId" <= '10729740697599'::bigint)) OR (("pixelId" >= '10729740763136'
>>> ::bigint) AND ("pixelId" <= '10729740894207'::bigint)) OR (("pixelId" >=
>>> '10729740959744'::bigint) AND ("pixelId" <= '10729741090815'::bigint)) OR
>>> (("pixelId" >= '10729741484032'::bigint) AND ("pixelId" <= '107
>>> 29741549567'::bigint)) OR (("pixelId" >= '10729741877248'::bigint) AND
>>> ("pixelId" <= '10729741942783'::bigint)) OR (("pixelId" >=
>>> '10729748955136'::bigint) AND ("pixelId" <= '10729749020671'::bigint)) OR
>>> (("pix
>>> elId" >= '10729868492800'::bigint) AND ("pixelId" <=
>>> '10729868754943'::bigint)) OR (("pixelId" >= '10729869082624'::bigint) AND
>>> ("pixelId" <= '10729869148159'::bigint)) OR (("pixelId" >=
>>> '10729869344768'::bigin
>>> t) AND ("pixelId" <= '10729869410303'::bigint)) OR (("pixelId" >=
>>> '10776494538752'::bigint) AND ("pixelId" <= '10776494604287'::bigint)))
>>> Heap Blocks: exact=2377
>>> -> BitmapOr (cost=541.17..541.17 rows=7831 width=0) (actual
>>> time=1.699..1.699 rows=0 loops=1)
>>> -> Bitmap Index Scan on "IDX_DiaSource_htmId20"
>>> (cost=0.00..11.92 rows=335 width=0) (actual time=0.137..0.137 rows=406
>>> loops=1)
>>> Index Cond: (("pixelId" >= '10729436479488'::bigint) AND
>>> ("pixelId" <= '10729440673791'::bigint))
>>> -> Bitmap Index Scan on "IDX_DiaSource_htmId20"
>>> (cost=0.00..100.33 rows=3976 width=0) (actual time=0.810..0.810 rows=4886
>>> loops=1)
>>> Index Cond: (("pixelId" >= '10729449062400'::bigint) AND
>>> ("pixelId" <= '10729499394047'::bigint))
>>> -> Bitmap Index Scan on "IDX_DiaSource_htmId20"
>>> (cost=0.00..11.92 rows=335 width=0) (actual time=0.043..0.043 rows=333
>>> loops=1)
>>> Index Cond: (("pixelId" >= '10729532948480'::bigint) AND
>>> ("pixelId" <= '10729537142783'::bigint))
>>> -> Bitmap Index Scan on "IDX_DiaSource_htmId20"
>>> (cost=0.00..4.67 rows=10 width=0) (actual time=0.008..0.008 rows=1 loops=1)
>>> Index Cond: (("pixelId" >= '10729542385664'::bigint) AND
>>> ("pixelId" <= '10729542451199'::bigint))
>>> -> Bitmap Index Scan on "IDX_DiaSource_htmId20"
>>> (cost=0.00..4.72 rows=15 width=0) (actual time=0.003..0.003 rows=16
>>> loops=1)
>>> Index Cond: (("pixelId" >= '10729542516736'::bigint) AND
>>> ("pixelId" <= '10729542647807'::bigint))
>>> -> Bitmap Index Scan on "IDX_DiaSource_htmId20"
>>> (cost=0.00..4.72 rows=15 width=0) (actual time=0.008..0.008 rows=5 loops=1)
>>> Index Cond: (("pixelId" >= '10729546579968'::bigint) AND
>>> ("pixelId" <= '10729546711039'::bigint))
>>> -> Bitmap Index Scan on "IDX_DiaSource_htmId20"
>>> (cost=0.00..4.67 rows=10 width=0) (actual time=0.003..0.003 rows=8 loops=1)
>>> Index Cond: (("pixelId" >= '10729546776576'::bigint) AND
>>> ("pixelId" <= '10729546842111'::bigint))
>>> -> Bitmap Index Scan on "IDX_DiaSource_htmId20"
>>> (cost=0.00..11.92 rows=335 width=0) (actual time=0.035..0.035 rows=318
>>> loops=1)
>>> Index Cond: (("pixelId" >= '10729566502912'::bigint) AND
>>> ("pixelId" <= '10729570697215'::bigint))
>>> -> Bitmap Index Scan on "IDX_DiaSource_htmId20"
>>> (cost=0.00..4.72 rows=15 width=0) (actual time=0.002..0.002 rows=0 loops=1)
>>> Index Cond: (("pixelId" >= '10729570959360'::bigint) AND
>>> ("pixelId" <= '10729571090431'::bigint))
>>> -> Bitmap Index Scan on "IDX_DiaSource_htmId20"
>>> (cost=0.00..4.67 rows=10 width=0) (actual time=0.002..0.003 rows=8 loops=1)
>>> Index Cond: (("pixelId" >= '10729571155968'::bigint) AND
>>> ("pixelId" <= '10729571221503'::bigint))
>>> -> Bitmap Index Scan on "IDX_DiaSource_htmId20"
>>> (cost=0.00..5.65 rows=108 width=0) (actual time=0.018..0.018 rows=108
>>> loops=1)
>>> Index Cond: (("pixelId" >= '10729571745792'::bigint) AND
>>> ("pixelId" <= '10729573056511'::bigint))
>>> -> Bitmap Index Scan on "IDX_DiaSource_htmId20"
>>> (cost=0.00..5.39 rows=82 width=0) (actual time=0.010..0.010 rows=105
>>> loops=1)
>>> Index Cond: (("pixelId" >= '10729573122048'::bigint) AND
>>> ("pixelId" <= '10729574105087'::bigint))
>>> -> Bitmap Index Scan on "IDX_DiaSource_htmId20"
>>> (cost=0.00..19.80 rows=723 width=0) (actual time=0.063..0.063 rows=674
>>> loops=1)
>>> Index Cond: (("pixelId" >= '10729574170624'::bigint) AND
>>> ("pixelId" <= '10729583280127'::bigint))
>>> -> Bitmap Index Scan on "IDX_DiaSource_htmId20"
>>> (cost=0.00..4.67 rows=10 width=0) (actual time=0.008..0.008 rows=1 loops=1)
>>> Index Cond: (("pixelId" >= '10729601105920'::bigint) AND
>>> ("pixelId" <= '10729601171455'::bigint))
>>> -> Bitmap Index Scan on "IDX_DiaSource_htmId20"
>>> (cost=0.00..11.92 rows=335 width=0) (actual time=0.074..0.074 rows=343
>>> loops=1)
>>> Index Cond: (("pixelId" >= '10729604251648'::bigint) AND
>>> ("pixelId" <= '10729608445951'::bigint))
>>> -> Bitmap Index Scan on "IDX_DiaSource_htmId20"
>>> (cost=0.00..4.72 rows=15 width=0) (actual time=0.009..0.009 rows=16
>>> loops=1)
>>> Index Cond: (("pixelId" >= '10729613164544'::bigint) AND
>>> ("pixelId" <= '10729613295615'::bigint))
>>> -> Bitmap Index Scan on "IDX_DiaSource_htmId20"
>>> (cost=0.00..4.67 rows=10 width=0) (actual time=0.002..0.002 rows=2 loops=1)
>>> Index Cond: (("pixelId" >= '10729613361152'::bigint) AND
>>> ("pixelId" <= '10729613426687'::bigint))
>>> -> Bitmap Index Scan on "IDX_DiaSource_htmId20"
>>> (cost=0.00..4.72 rows=15 width=0) (actual time=0.009..0.009 rows=2 loops=1)
>>> Index Cond: (("pixelId" >= '10729614737408'::bigint) AND
>>> ("pixelId" <= '10729614868479'::bigint))
>>> -> Bitmap Index Scan on "IDX_DiaSource_htmId20"
>>> (cost=0.00..4.72 rows=15 width=0) (actual time=0.003..0.003 rows=12
>>> loops=1)
>>> Index Cond: (("pixelId" >= '10729614934016'::bigint) AND
>>> ("pixelId" <= '10729615065087'::bigint))
>>> -> Bitmap Index Scan on "IDX_DiaSource_htmId20"
>>> (cost=0.00..4.72 rows=15 width=0) (actual time=0.003..0.003 rows=11
>>> loops=1)
>>> Index Cond: (("pixelId" >= '10729615130624'::bigint) AND
>>> ("pixelId" <= '10729615261695'::bigint))
>>> -> Bitmap Index Scan on "IDX_DiaSource_htmId20"
>>> (cost=0.00..4.67 rows=10 width=0) (actual time=0.003..0.003 rows=10
>>> loops=1)
>>> Index Cond: (("pixelId" >= '10729615654912'::bigint) AND
>>> ("pixelId" <= '10729615720447'::bigint))
>>> -> Bitmap Index Scan on "IDX_DiaSource_htmId20"
>>> (cost=0.00..4.67 rows=10 width=0) (actual time=0.002..0.002 rows=2 loops=1)
>>> Index Cond: (("pixelId" >= '10729616048128'::bigint) AND
>>> ("pixelId" <= '10729616113663'::bigint))
>>> -> Bitmap Index Scan on "IDX_DiaSource_htmId20"
>>> (cost=0.00..11.92 rows=335 width=0) (actual time=0.036..0.036 rows=254
>>> loops=1)
>>> Index Cond: (("pixelId" >= '10729621028864'::bigint) AND
>>> ("pixelId" <= '10729625223167'::bigint))
>>> -> Bitmap Index Scan on "IDX_DiaSource_htmId20"
>>> (cost=0.00..4.67 rows=10 width=0) (actual time=0.009..0.009 rows=15
>>> loops=1)
>>> Index Cond: (("pixelId" >= '10729625747456'::bigint) AND
>>> ("pixelId" <= '10729625812991'::bigint))
>>> -> Bitmap Index Scan on "IDX_DiaSource_htmId20"
>>> (cost=0.00..4.72 rows=15 width=0) (actual time=0.003..0.003 rows=17
>>> loops=1)
>>> Index Cond: (("pixelId" >= '10729625878528'::bigint) AND
>>> ("pixelId" <= '10729626009599'::bigint))
>>> -> Bitmap Index Scan on "IDX_DiaSource_htmId20"
>>> (cost=0.00..4.98 rows=41 width=0) (actual time=0.004..0.004 rows=32
>>> loops=1)
>>> Index Cond: (("pixelId" >= '10729626337280'::bigint) AND
>>> ("pixelId" <= '10729626796031'::bigint))
>>> -> Bitmap Index Scan on "IDX_DiaSource_htmId20"
>>> (cost=0.00..6.22 rows=165 width=0) (actual time=0.029..0.029 rows=144
>>> loops=1)
>>> Index Cond: (("pixelId" >= '10729626861568'::bigint) AND
>>> ("pixelId" <= '10729628893183'::bigint))
>>> -> Bitmap Index Scan on "IDX_DiaSource_htmId20"
>>> (cost=0.00..5.80 rows=123 width=0) (actual time=0.016..0.016 rows=100
>>> loops=1)
>>> Index Cond: (("pixelId" >= '10729628958720'::bigint) AND
>>> ("pixelId" <= '10729630466047'::bigint))
>>> -> Bitmap Index Scan on "IDX_DiaSource_htmId20"
>>> (cost=0.00..4.67 rows=10 width=0) (actual time=0.005..0.005 rows=4 loops=1)
>>> Index Cond: (("pixelId" >= '10729630597120'::bigint) AND
>>> ("pixelId" <= '10729630662655'::bigint))
>>> -> Bitmap Index Scan on "IDX_DiaSource_htmId20"
>>> (cost=0.00..4.67 rows=10 width=0) (actual time=0.003..0.003 rows=2 loops=1)
>>> Index Cond: (("pixelId" >= '10729630793728'::bigint) AND
>>> ("pixelId" <= '10729630859263'::bigint))
>>> -> Bitmap Index Scan on "IDX_DiaSource_htmId20"
>>> (cost=0.00..4.92 rows=35 width=0) (actual time=0.006..0.006 rows=22
>>> loops=1)
>>> Index Cond: (("pixelId" >= '10729630990336'::bigint) AND
>>> ("pixelId" <= '10729631383551'::bigint))
>>> -> Bitmap Index Scan on "IDX_DiaSource_htmId20"
>>> (cost=0.00..6.32 rows=175 width=0) (actual time=0.031..0.031 rows=155
>>> loops=1)
>>> Index Cond: (("pixelId" >= '10729631449088'::bigint) AND
>>> ("pixelId" <= '10729633611775'::bigint))
>>> -> Bitmap Index Scan on "IDX_DiaSource_htmId20"
>>> (cost=0.00..4.82 rows=25 width=0) (actual time=0.022..0.022 rows=58
>>> loops=1)
>>> Index Cond: (("pixelId" >= '10729650388992'::bigint) AND
>>> ("pixelId" <= '10729650651135'::bigint))
>>> -> Bitmap Index Scan on "IDX_DiaSource_htmId20"
>>> (cost=0.00..5.18 rows=61 width=0) (actual time=0.009..0.009 rows=63
>>> loops=1)
>>> Index Cond: (("pixelId" >= '10729650716672'::bigint) AND
>>> ("pixelId" <= '10729651437567'::bigint))
>>> -> Bitmap Index Scan on "IDX_DiaSource_htmId20"
>>> (cost=0.00..4.82 rows=25 width=0) (actual time=0.019..0.019 rows=30
>>> loops=1)
>>> Index Cond: (("pixelId" >= '10729652748288'::bigint) AND
>>> ("pixelId" <= '10729653010431'::bigint))
>>> -> Bitmap Index Scan on "IDX_DiaSource_htmId20"
>>> (cost=0.00..4.67 rows=10 width=0) (actual time=0.006..0.006 rows=10
>>> loops=1)
>>> Index Cond: (("pixelId" >= '10729653141504'::bigint) AND
>>> ("pixelId" <= '10729653207039'::bigint))
>>> -> Bitmap Index Scan on "IDX_DiaSource_htmId20"
>>> (cost=0.00..4.67 rows=10 width=0) (actual time=0.004..0.004 rows=1 loops=1)
>>> Index Cond: (("pixelId" >= '10729653272576'::bigint) AND
>>> ("pixelId" <= '10729653338111'::bigint))
>>> -> Bitmap Index Scan on "IDX_DiaSource_htmId20"
>>> (cost=0.00..4.67 rows=10 width=0) (actual time=0.003..0.003 rows=0 loops=1)
>>> Index Cond: (("pixelId" >= '10729653600256'::bigint) AND
>>> ("pixelId" <= '10729653665791'::bigint))
>>> -> Bitmap Index Scan on "IDX_DiaSource_htmId20"
>>> (cost=0.00..4.82 rows=25 width=0) (actual time=0.006..0.006 rows=20
>>> loops=1)
>>> Index Cond: (("pixelId" >= '10729653796864'::bigint) AND
>>> ("pixelId" <= '10729654059007'::bigint))
>>> -> Bitmap Index Scan on "IDX_DiaSource_htmId20"
>>> (cost=0.00..4.67 rows=10 width=0) (actual time=0.003..0.003 rows=1 loops=1)
>>> Index Cond: (("pixelId" >= '10729654190080'::bigint) AND
>>> ("pixelId" <= '10729654255615'::bigint))
>>> -> Bitmap Index Scan on "IDX_DiaSource_htmId20"
>>> (cost=0.00..4.67 rows=10 width=0) (actual time=0.003..0.003 rows=2 loops=1)
>>> Index Cond: (("pixelId" >= '10729654321152'::bigint) AND
>>> ("pixelId" <= '10729654386687'::bigint))
>>> -> Bitmap Index Scan on "IDX_DiaSource_htmId20"
>>> (cost=0.00..4.72 rows=15 width=0) (actual time=0.003..0.003 rows=2 loops=1)
>>> Index Cond: (("pixelId" >= '10729654452224'::bigint) AND
>>> ("pixelId" <= '10729654583295'::bigint))
>>> -> Bitmap Index Scan on "IDX_DiaSource_htmId20"
>>> (cost=0.00..5.03 rows=46 width=0) (actual time=0.026..0.026 rows=47
>>> loops=1)
>>> Index Cond: (("pixelId" >= '10729734275072'::bigint) AND
>>> ("pixelId" <= '10729734799359'::bigint))
>>> -> Bitmap Index Scan on "IDX_DiaSource_htmId20"
>>> (cost=0.00..5.03 rows=46 width=0) (actual time=0.009..0.009 rows=45
>>> loops=1)
>>> Index Cond: (("pixelId" >= '10729735061504'::bigint) AND
>>> ("pixelId" <= '10729735585791'::bigint))
>>> -> Bitmap Index Scan on "IDX_DiaSource_htmId20"
>>> (cost=0.00..5.03 rows=46 width=0) (actual time=0.018..0.019 rows=54
>>> loops=1)
>>> Index Cond: (("pixelId" >= '10729735847936'::bigint) AND
>>> ("pixelId" <= '10729736372223'::bigint))
>>> -> Bitmap Index Scan on "IDX_DiaSource_htmId20"
>>> (cost=0.00..4.82 rows=25 width=0) (actual time=0.039..0.039 rows=42
>>> loops=1)
>>> Index Cond: (("pixelId" >= '10729737945088'::bigint) AND
>>> ("pixelId" <= '10729738207231'::bigint))
>>> -> Bitmap Index Scan on "IDX_DiaSource_htmId20"
>>> (cost=0.00..4.72 rows=15 width=0) (actual time=0.006..0.006 rows=8 loops=1)
>>> Index Cond: (("pixelId" >= '10729738993664'::bigint) AND
>>> ("pixelId" <= '10729739124735'::bigint))
>>> -> Bitmap Index Scan on "IDX_DiaSource_htmId20"
>>> (cost=0.00..4.67 rows=10 width=0) (actual time=0.006..0.006 rows=20
>>> loops=1)
>>> Index Cond: (("pixelId" >= '10729739190272'::bigint) AND
>>> ("pixelId" <= '10729739255807'::bigint))
>>> -> Bitmap Index Scan on "IDX_DiaSource_htmId20"
>>> (cost=0.00..4.72 rows=15 width=0) (actual time=0.004..0.004 rows=4 loops=1)
>>> Index Cond: (("pixelId" >= '10729740566528'::bigint) AND
>>> ("pixelId" <= '10729740697599'::bigint))
>>> -> Bitmap Index Scan on "IDX_DiaSource_htmId20"
>>> (cost=0.00..4.72 rows=15 width=0) (actual time=0.005..0.005 rows=16
>>> loops=1)
>>> Index Cond: (("pixelId" >= '10729740763136'::bigint) AND
>>> ("pixelId" <= '10729740894207'::bigint))
>>> -> Bitmap Index Scan on "IDX_DiaSource_htmId20"
>>> (cost=0.00..4.72 rows=15 width=0) (actual time=0.005..0.005 rows=13
>>> loops=1)
>>> Index Cond: (("pixelId" >= '10729740959744'::bigint) AND
>>> ("pixelId" <= '10729741090815'::bigint))
>>> -> Bitmap Index Scan on "IDX_DiaSource_htmId20"
>>> (cost=0.00..4.67 rows=10 width=0) (actual time=0.020..0.020 rows=23
>>> loops=1)
>>> Index Cond: (("pixelId" >= '10729741484032'::bigint) AND
>>> ("pixelId" <= '10729741549567'::bigint))
>>> -> Bitmap Index Scan on "IDX_DiaSource_htmId20"
>>> (cost=0.00..4.67 rows=10 width=0) (actual time=0.005..0.005 rows=3 loops=1)
>>> Index Cond: (("pixelId" >= '10729741877248'::bigint) AND
>>> ("pixelId" <= '10729741942783'::bigint))
>>> -> Bitmap Index Scan on "IDX_DiaSource_htmId20"
>>> (cost=0.00..4.67 rows=10 width=0) (actual time=0.012..0.012 rows=11
>>> loops=1)
>>> Index Cond: (("pixelId" >= '10729748955136'::bigint) AND
>>> ("pixelId" <= '10729749020671'::bigint))
>>> -> Bitmap Index Scan on "IDX_DiaSource_htmId20"
>>> (cost=0.00..4.82 rows=25 width=0) (actual time=0.013..0.013 rows=15
>>> loops=1)
>>> Index Cond: (("pixelId" >= '10729868492800'::bigint) AND
>>> ("pixelId" <= '10729868754943'::bigint))
>>> -> Bitmap Index Scan on "IDX_DiaSource_htmId20"
>>> (cost=0.00..4.67 rows=10 width=0) (actual time=0.006..0.006 rows=11
>>> loops=1)
>>> Index Cond: (("pixelId" >= '10729869082624'::bigint) AND
>>> ("pixelId" <= '10729869148159'::bigint))
>>> -> Bitmap Index Scan on "IDX_DiaSource_htmId20"
>>> (cost=0.00..4.67 rows=10 width=0) (actual time=0.004..0.004 rows=1 loops=1)
>>> Index Cond: (("pixelId" >= '10729869344768'::bigint) AND
>>> ("pixelId" <= '10729869410303'::bigint))
>>> -> Bitmap Index Scan on "IDX_DiaSource_htmId20"
>>> (cost=0.00..4.67 rows=10 width=0) (actual time=0.040..0.040 rows=12
>>> loops=1)
>>> Index Cond: (("pixelId" >= '10776494538752'::bigint) AND
>>> ("pixelId" <= '10776494604287'::bigint))
>>> First execution:
>>> Planning Time: 4.742 ms
>>> Execution Time: 272.052 ms
>>> Subsequent executions:
>>> Planning Time: 1.070 ms
>>> Execution Time: 40.963 ms
>>>
>>> select count(*) from "DiaSource"
>>> [more] - > ;
>>> count
>>> -----------
>>> 302971183
>>>
>>> So PG is taking each predicate -> searching
>>> through IDX_DiaSource_htmId20 -> building bitmap of ctid's (i think that's
>>> corollary to oracle's rowid) -> visiting table blocks containing any of
>>> those pixelID ranges 1x for additional columns. That seems extremely
>>> efficient to me.
>>>
>>> I did try a "create table x as select * from diasource" sorting the
>>> table by pixelID and creating a brin index to see how that went. Not well
>>> (~2.5 second response time). My other thought was to range partition by
>>> pixelID + brin index. I might also play w/ parallel query but process
>>> communication overhead and scalability implications (100's of concurrent
>>> processes running similar SQL) probably make that a dead end.
>>>
>>> Anyways, I figured I'd submit this to the list first to see if there
>>> might be better possibilities.
>>>
>>
>> It is hard to do some better - just you can check if without bitmap index
>> scan this query will be better
>>
>> set enable_bitmapscan to off';
>>
>> and repeat EXPLAIN ANALYZE ..
>>
>> Regards
>>
>> Pavel
>>
>>
>>> Thanks for any input!
>>>
>>> Chris
>>>
>>

Best regards
Olivier
--
Olivier Gautherot
Tel: +33 6 02 71 92 23
https://www.linkedin.com/in/ogautherot/

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Michael Lewis 2020-04-16 15:46:35 Re: possibilities for SQL optimization
Previous Message Chris Stephens 2020-04-16 14:57:13 Re: possibilities for SQL optimization