Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nfU6A-0005jL-If for pgsql-admin@arkaria.postgresql.org; Fri, 15 Apr 2022 22:07:26 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1nfU69-0006R9-Gk for pgsql-admin@arkaria.postgresql.org; Fri, 15 Apr 2022 22:07:25 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nfU69-0006R0-4g for pgsql-admin@lists.postgresql.org; Fri, 15 Apr 2022 22:07:25 +0000 Received: from mail-qt1-x832.google.com ([2607:f8b0:4864:20::832]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1nfU63-000596-U0 for pgsql-admin@lists.postgresql.org; Fri, 15 Apr 2022 22:07:24 +0000 Received: by mail-qt1-x832.google.com with SMTP id t2so6680921qtw.9 for ; Fri, 15 Apr 2022 15:07:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=message-id:date:mime-version:user-agent:subject:content-language:to :references:from:in-reply-to; bh=vMx+TckohkS8bLAtC4nztH1gUZwFLR9kXFvActvSGdw=; b=c+iKCmnJHRrU9C47IWz+zohFU7hCwHYzasQ5+GHkZyi86Nhn175L3muvPdjtCkw1UW 7s61aPdEyE66tthxY1LJJdPA1xalqcBZQMxYT4TYxRf9RxrEIDu4dejyqS+WNL255JLk PshBzVPt72zB+GVTDhthhevzHYDpB7ZPnSY6cfBZpcqXaJ/lAngX6YbaDQE2AB1ow/Ol 5z5QewPEr/ymJ9Envy38CCIWE5rLHswE4wLG7KkrAREVwao85hQcVfBcpUEx066fRTay KZ24sXaRWNUG6YvKkXFW/ebLCYfdvQ7X8JbN6FzS/ZXDPh2GbVbMOJFC1S+SBqXMvlzJ 0KmQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:date:mime-version:user-agent:subject :content-language:to:references:from:in-reply-to; bh=vMx+TckohkS8bLAtC4nztH1gUZwFLR9kXFvActvSGdw=; b=7z9xBnnDJDLY3dIM0xVkqvWcqyV5AvbZtoWdFop0g0z9i9yq3xT7oQixm11EdlWFu2 CjXYtlJQtpeRfIq+jkBAdrMqeUtB35TsQF2+rJtGSBYFELoGkBxDiwKwXkp50s21+3Q8 ag6B4bE5OoQ5pTv3saBX52ZFxFtoEs8mV1VocQXYCCEC5+VeuOUAGchEDEZNzJFpUBEJ W/CsrVQ9kpPgSmvY16hLlQ51yDOSLq1TpQ34YK+TdO0ri2HLfUPLRx2+50oRRPDOKcFr cjBscpTtc/DQrrDLn1H+CFFz3LsgoEP50MHGRL/QS/Sg8b+nusTmUGVR91VXO0vH7lME 7hpw== X-Gm-Message-State: AOAM532B9bNZOqL69j2PfyRnBoriDmeBjbl0OMLWKpg9FdHm3F6iDjCs 5oGlUpcJSE6oTNWkzoEABgo+vlDVYE4= X-Google-Smtp-Source: ABdhPJzvC0luSg+hShNYsF71TITujn7DpSKQ4CfsSaOhmzXmXfK8w57Y80z+0qj+b7k5Lm368TSmzw== X-Received: by 2002:a05:622a:1f86:b0:2ee:9fae:fff3 with SMTP id cb6-20020a05622a1f8600b002ee9faefff3mr817215qtb.131.1650060437375; Fri, 15 Apr 2022 15:07:17 -0700 (PDT) Received: from [192.168.2.100] (pool-72-79-19-93.nwrknj.east.verizon.net. [72.79.19.93]) by smtp.gmail.com with ESMTPSA id l6-20020a05622a050600b002f1f3895a95sm331131qtx.71.2022.04.15.15.07.16 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 15 Apr 2022 15:07:16 -0700 (PDT) Content-Type: multipart/alternative; boundary="------------kwdO8ITAm7tWfWUVpIPzMwlK" Message-ID: <078855a8-bab5-b3ac-ddaf-00ff405b6835@gmail.com> Date: Fri, 15 Apr 2022 18:07:16 -0400 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.8.0 Subject: Re: postgresql-14 slow query Content-Language: en-US To: pgsql-admin@lists.postgresql.org References: From: Mladen Gogala In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------kwdO8ITAm7tWfWUVpIPzMwlK Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 4/15/22 16:59, Kenny Bachman wrote: > Hello Team, > > How can I tune this query? It got even slower when I created the index > for (state_id, order_id desc). The following explain analyze output is > without an index. It takes 13 seconds if I create that index. Could > you help me? > > Thank you so much for your help. > > SELECT DISTINCT ON (order_history.order_id) order_id, > order_history.creation_date  AS c_date > FROM work.order_history WHERE (order_history.state_id = ANY (ARRAY[30, > 51, 63, 136, 195, 233, 348])) AND order_history.is_false = 0 > ORDER BY order_history.order_id DESC; > > EXPLAIN ANALYZE output: > >  Unique  (cost=672007.46..1519683.55 rows=206423 width=12) (actual > time=1701.420..3439.095 rows=2049357 loops=1) >    ->  Gather Merge  (cost=672007.46..1502346.48 rows=6934827 > width=12) (actual time=1701.419..2989.243 rows=6891551 loops=1) >          Workers Planned: 4 >          Workers Launched: 4 >          ->  Sort  (cost=671007.40..675341.67 rows=1733707 width=12) > (actual time=1657.609..1799.723 rows=1378310 loops=5) >                Sort Key: order_id DESC >                Sort Method: external merge  Disk: 38960kB >                Worker 0:  Sort Method: external merge  Disk: 31488kB >                Worker 1:  Sort Method: external merge  Disk: 36120kB >                Worker 2:  Sort Method: external merge  Disk: 31368kB >                Worker 3:  Sort Method: external merge  Disk: 36152kB >                ->  Parallel Seq Scan on order_history >  (cost=0.00..473993.00 rows=1733707 width=12) (actual > time=0.041..1211.485 rows=1378310 loops=5) >                      Filter: ((is_false = 0) AND (state_id = ANY > ('{30,51,63,136,195,233,348}'::integer[]))) >                      Rows Removed by Filter: 3268432 >  Planning Time: 0.405 ms >  Execution Time: 3510.433 ms Parallel sequential scan of 1.7M rows, followed by a sort, all done in 3.5 sec? Doesn't look slow to me. Would indexing state_id be an option? -- Mladen Gogala Database Consultant Tel: (347) 321-1217 https://dbwhisperer.wordpress.com --------------kwdO8ITAm7tWfWUVpIPzMwlK Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 8bit
On 4/15/22 16:59, Kenny Bachman wrote:
Hello Team,

How can I tune this query? It got even slower when I created the index for (state_id, order_id desc). The following explain analyze output is without an index. It takes 13 seconds if I create that index. Could you help me?

Thank you so much for your help.

SELECT DISTINCT ON (order_history.order_id) order_id, order_history.creation_date  AS c_date
FROM work.order_history WHERE (order_history.state_id = ANY (ARRAY[30, 51, 63, 136, 195, 233, 348])) AND order_history.is_false = 0
ORDER BY order_history.order_id DESC;

EXPLAIN ANALYZE output:

 Unique  (cost=672007.46..1519683.55 rows=206423 width=12) (actual time=1701.420..3439.095 rows=2049357 loops=1)
   ->  Gather Merge  (cost=672007.46..1502346.48 rows=6934827 width=12) (actual time=1701.419..2989.243 rows=6891551 loops=1)
         Workers Planned: 4
         Workers Launched: 4
         ->  Sort  (cost=671007.40..675341.67 rows=1733707 width=12) (actual time=1657.609..1799.723 rows=1378310 loops=5)
               Sort Key: order_id DESC
               Sort Method: external merge  Disk: 38960kB
               Worker 0:  Sort Method: external merge  Disk: 31488kB
               Worker 1:  Sort Method: external merge  Disk: 36120kB
               Worker 2:  Sort Method: external merge  Disk: 31368kB
               Worker 3:  Sort Method: external merge  Disk: 36152kB
               ->  Parallel Seq Scan on order_history  (cost=0.00..473993.00 rows=1733707 width=12) (actual time=0.041..1211.485 rows=1378310 loops=5)
                     Filter: ((is_false = 0) AND (state_id = ANY ('{30,51,63,136,195,233,348}'::integer[])))
                     Rows Removed by Filter: 3268432
 Planning Time: 0.405 ms
 Execution Time: 3510.433 ms

Parallel sequential scan of 1.7M rows, followed by a sort, all done in 3.5 sec? Doesn't look slow to me. Would indexing state_id be an option?

-- 
Mladen Gogala
Database Consultant
Tel: (347) 321-1217
https://dbwhisperer.wordpress.com
--------------kwdO8ITAm7tWfWUVpIPzMwlK--