如何检查在哪一列上创建索引以优化性能

How to check on which column to create Index to optimize performance

我有以下查询,它花费了太多时间,我必须优化查询性能。 table.

中的任何一个都没有索引

但是现在为了优化查询性能,我正在考虑创建索引。但不确定我必须创建索引的具体过滤列。 我在想我将对所有过滤列条件进行分组并计算不同记录的数量,然后决定我应该在哪个列上创建索引但对此不确定。

    Select * from ORDER_MART FOL where FOL.PARENT_PROD_SRCID 
IN 
(
select e.PARENT_PROD_SRCID
from SRC_GRP a 
JOIN MAR_GRP b ON a.h_lpgrp_id = b.h_lpgrp_id    
JOIN DATA_GRP e ON e.parent_prod_srcid = b.H_LOCPR_ID
WHERE a.CHILD_LOCPR_ID != 0 
AND dt_id BETWEEN 20170101 AND 20170731 
AND valid_order = 1  
AND a.PROD_TP_CODE like 'C%'    
)
AND FOL.PROD_SRCID = 0 and IS_CAPS = 1;

下面是我的查询执行计划:

Select * 
from ORDER_MART FOL 
     INNER JOIN (
           select distinct e.PARENT_PROD_SRCID
           from SRC_GRP a 
           JOIN MAR_GRP b ON a.h_lpgrp_id = b.h_lpgrp_id    
           JOIN DATA_GRP e ON e.parent_prod_srcid = b.H_LOCPR_ID
           WHERE a.CHILD_LOCPR_ID != 0 -- remove the lines from                               INT_CDW_DV.S_LOCAL_PROD_GRP_MAIN  with child prod srcid equal to 0
           AND dt_id BETWEEN 20170101 AND 20170731 
           AND valid_order = 1 --and is_caps=1 
           AND a.PROD_TP_CODE like 'C%'    
          ) sub ON sub.PARENT_PROD_SRCID=FOL.PARENT_PROD_SRCID 
where FOL.PROD_SRCID = 0 and IS_CAPS = 1;

如果您使用 JOIN 而不是 IN 并添加 distinct 以减少子查询中的行数,会怎样。