SubQuery在postgreSQL Server中占用太长时间

问题描述 投票:0回答:3

我有一个需要花费很多时间来执行的查询。我不知道如何减少这个。此查询不仅会使PSQL占用高CPU。

我必须在不同条件下选择单个列qazxsw poi作为不同的名称。由于这个要求,我创建了子查询,

查询是:

sip_username

我应该改变什么来加快速度?

sql postgresql
3个回答
1
投票

你可以试试这段代码:

SELECT   sip_username,
         product_code,
         display_name as dname,
         user_id as uid,
         location_id,
         tenant_id,
         (
           SELECT sip_username
           FROM   admin_users_product
           WHERE  (sip_username = A.sip_username)  AND    
                  (product_code = 'bizfms')
         ) AS bizfms_username,
         (
           SELECT sip_username
           FROM admin_users_product
           WHERE (sip_username = A.sip_username) AND
                 (product_code = 'mlc')
                 ) AS mlc_username,
         (
           SELECT sip_username
           FROM admin_users_product
           WHERE (sip_username = A.sip_username) AND
                 (product_code = 'bizrtm')
         ) AS bizrtm_username
FROM     admin_users_product AS A
WHERE    A.location_id = 18

1
投票

您应该在某些列上创建索引

  1. 在location_id和sip_username列上的admin_users_product表上创建索引
  2. 在sip_username和product_code列上的admin_users_product表上创建索引

然后你查询运行得更快......


1
投票

你可以试试这个。案例不存在索引,您需要创建如Min Namiq Abdullayev所述。

SELECT sip_username,
   product_code,
   display_name as dname,
   user_id      as uid,
   location_id,
   tenant_id,
   (CASE product_code
        WHEN 'bizfms' THEN
            sip_username
        ELSE Null
       END)     AS bizfms_username,
   (CASE product_code
        WHEN 'mlc' THEN
            sip_username
        ELSE Null
       END)     AS mlc_username,
   (CASE product_code
        WHEN 'bizrtm' THEN
            sip_username
        ELSE Null
       END)     AS bizrtm_username
  FROM admin_users_product AS A
  WHERE A.location_id = 18
© www.soinside.com 2019 - 2024. All rights reserved.