On Thu, Mar 13, 2025 at 11:48 PM Durgamahesh Manne <
maheshpostgr...@gmail.com> wrote:

> On Fri, 14 Mar, 2025, 09:11 Ron Johnson, <ronljohnso...@gmail.com> wrote:
>
>> On Thu, Mar 13, 2025 at 11:25 PM Durgamahesh Manne <
>> maheshpostgr...@gmail.com> wrote:
>>
>>> On Fri, Mar 14, 2025 at 8:19 AM Ron Johnson <ronljohnso...@gmail.com>
>>> wrote:
>>>
>>>> On Thu, Mar 13, 2025 at 10:16 PM Durgamahesh Manne <
>>>> maheshpostgr...@gmail.com> wrote:
>>>> [snip]
>>>>
>>>>> Hi Adrian Klaver
>>>>>
>>>>> 1) Postgres version.
>>>>>  select version();
>>>>>                                                     version
>>>>>
>>>>> ---------------------------------------------------------------------------------------------------------------
>>>>>  PostgreSQL 14.12 on aarch64-unknown-linux-gnu, compiled by gcc (GCC)
>>>>> 7.3.1 20180712 (Red Hat 7.3.1-6), 64-bit
>>>>>
>>>>> 2) Complete(including indexes) table schema.
>>>>>
>>>>>                                               Table
>>>>> "liveaggregations.cachekeys"
>>>>>     Column     |          Type          | Collation | Nullable |
>>>>> Default | Storage  | Compression
>>>>>
>>>>> ---------------+------------------------+-----------+----------+---------+----------+------------
>>>>>  cachetype     | character varying(255) |           |          |
>>>>>   | extended |
>>>>>  trsid         | character varying(255) |           |          |
>>>>>   | extended |
>>>>>  brandid       | character varying(255) |           |          |
>>>>>   | extended |
>>>>>  sportid       | character varying(255) |           |          |
>>>>>   | extended |
>>>>>  competitionid | character varying(255) |           |          |
>>>>>   | extended |
>>>>>  eventid       | character varying(255) |           |          |
>>>>>   | extended |
>>>>>  marketid      | character varying(255) |           |          |
>>>>>   | extended |
>>>>>  selectionid   | character varying(255) |           |          |
>>>>>   | extended |
>>>>>  keytype       | character varying(255) |           |          |
>>>>>   | extended |
>>>>>  key           | character varying(255) |           | not null |
>>>>>   | extended |
>>>>> Indexes:
>>>>>     "cachekeys_key_pk" PRIMARY KEY, btree (key)
>>>>>     "idx_cachekeys" btree (cachetype, trsid, brandid, sportid,
>>>>> competitionid, eventid, marketid)
>>>>>     "idx_marketid" btree (marketid)
>>>>>
>>>>> 3) Output of EXPLAIN ANALYZE of query.
>>>>>
>>>>>  Result  (cost=2.80..2.83 rows=1 width=1) (actual time=0.030..0.030
>>>>> rows=1 loops=1)
>>>>>    InitPlan 1 (returns $0)
>>>>>      ->  Index Only Scan using idx_cachekeys on cachekeys
>>>>>  (cost=0.55..2.80 rows=1 width=0) (actual time=0.029..0.029 rows=1 
>>>>> loops=1)
>>>>>            Index Cond: ((cachetype = 'BoMatrix'::text) AND (trsid =
>>>>> 'daznbetuk'::text) AND (brandid = 'daznbet'::text) AND (sportid =
>>>>> 'BOX'::text) AND (competitionid = 'U-1998'::text) AND (eventid =
>>>>> 'U-523596'::text))
>>>>>            Heap Fetches: 0
>>>>>  Planning Time: 0.221 ms
>>>>>  Execution Time: 0.046 ms
>>>>>
>>>>
>>>> That looks pretty reasonable.
>>>>
>>>> 1. Now show what happens with the LIMIT clause.
>>>> 2. How many rows does it return?
>>>> 3. Do you keep the table regularly vacuumed and analyzed?
>>>>
>>>> Hey Ron
>>>
>>> 1. Now show what happens with the LIMIT clause.
>>> and result set of query  and *Size of the table 287MB*
>>>  exists
>>> --------
>>>  t
>>> (1 row)
>>>
>>> --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>>>  Result  (cost=2.80..2.83 rows=1 width=1) (actual time=0.029..0.030
>>> rows=1 loops=1)
>>>    InitPlan 1 (returns $0)
>>>      ->  Index Only Scan using idx_cachekeys on cachekeys
>>>  (cost=0.55..2.80 rows=1 width=0) (actual time=0.028..0.028 rows=1 loops=1)
>>>            Index Cond: ((cachetype = 'BoMatrix'::text) AND (trsid =
>>> 'daznbetuk'::text) AND (brandid = 'daznbet'::text) AND (sportid =
>>> 'BOX'::text) AND (competitionid = 'U-1998'::text) AND (eventid =
>>> 'U-523596'::text))
>>>            Heap Fetches: 1
>>>  Planning Time: 0.084 ms
>>>  Execution Time: 0.043 ms
>>>
>>
>> This might be due to caching.  Run the query with LIMIT three times, and
>> then remove the LIMIT and run three times.
>>
>> Honestly, though, the execution timings seem pretty good.  What exactly
>> is the problem?
>>
>
> Hi Team and Andrian
>
> LIMIT is not necessary to use in select here in this case
>
> To return one row takes 43ms is not optimal
>

What did it used to take?

Planning takes 2x as long as execution.  What if you just run "SELECT Key
FROM CACHEKEYS WHERE CacheType = $1 AND TrsId = $2 AND BrandId = $3 AND
SportId = $4 AND CompetitionId = $5 AND EventId = $6 AND MarketId = $7" and
change app so that "returns one or more rows means true"?

This is also a valid method:
SELECT COUNT(*) FROM CACHEKEYS WHERE CacheType = $1 AND TrsId = $2 AND
BrandId = $3 AND SportId = $4 AND CompetitionId = $5 AND EventId = $6 AND
MarketId = $7

-- 
Death to <Redacted>, and butter sauce.
Don't boil me, I'm still alive.
<Redacted> lobster!

Reply via email to