如何避免Informix SQL中的GROUP BY子句

时间:2017-07-12 09:20:17

标签: sql informix

我有一个包含多个group by子句的查询,并且需要花费数小时才能从表中检索数据。有办法避免这种情况吗? 查询有很大的组,当我观察查询计划时,我可以看到扫描(索引扫描),加入时间过长。

1 个答案:

答案 0 :(得分:0)

您使用的是哪种Informix版本和版本?

您能提供查询计划吗?

没有该组将返回多少行?

我会对数据进行非规范化。

也是为什么

(
                SELECT  MIN(l.customer_id) customer_id,
                        h.cust_key              
                FROM    lenstore_custs l,
                        c_head h
                WHERE   l.c_rec_key = h.c_rec_key
                GROUP   BY 2
            ) l,

lenstore_custs和c_head中有多少行?

也许存储在c_head表的min cust_id中,以避免每次都需要连接和组。

另外

    (
        SELECT  MAX(m.unit_mes_desc)
        FROM    art_mast m,
                art_unit_mes u,
                inv_detail i
        WHERE   i.visit_key = v.visit_key
        AND     i.item_type = "J"
        AND     i.item_no = u.ean11
        AND     u.article_number = m.article_number
    ) cl_info

为什么desc列上的max desc,max听起来不对!

另外

NVL(c.contact_fp_qty + c.contact_sp_qty,0)

你确实意识到如果EITHER值为NULL,+将评估为NULL,结果将为0.你可能需要NVL,每列0并将它们加在一起。

我可能会在列上使用默认的0值更改数据模型,以便存储值0是不相关的列而不是null,以帮助对列进行求和。如果您确实需要知道某个值是否为null,则添加一个指示符列以显示该值为null。

相关问题