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