gpt4 book ai didi

sql - 通过使天文查询更长的时间进行分组

转载 作者:行者123 更新时间:2023-12-03 17:35:13 25 4
gpt4 key购买 nike

*首先,我对我的服务器只有读权限。只是,FYI似乎出现了很多……

服务器:用于i的DB2(6.1)(IBM)

我有一个查询,我正在其中有1900万行的表上运行(我没有设计它们,我只是查询它们)。我一直将返回数据限制为10行(*),直到对该查询进行整理,以使返回时间更为合理。

基本设计是,我需要使用WEEK_ID和CATEGORY列获取有关我们每周销售的产品类别的数据。这是示例代码(带有一些重要的位####。)

SELECT WEEK_ID, CATEGORY
FROM DWQ####.SLSCATW
INNER JOIN DW####.CATEGORY
ON DWQ####.SLSCATW.CATEGORY_NUMBER = DW####.CATEGORY.CATEGORY_NUMBER
WHERE WEEK_ID
BETWEEN 200952 AND 201230 --Format is year/week
GROUP BY WEEK_ID, CATEGORY


如果我注释掉最后一行,则可以在254毫秒内返回100行。如果我把那条线放回去,需要的时间比等待:-)的时间还要长。 (我等待的时间最长为10分钟。)

这个问题分为两个部分。第一个问题很基本:这是正常现象吗?我试图将其归纳为50个类别(大约)和140个星期(左右)。我意识到有很多信息可以压缩1900万行,但是我希望将查询限制为返回的10行会减少时间?

而且,如果我不只是一个完整的n00b,而实际上这不需要花费几分钟,那么我的SQL到底有什么问题?

我已经搜索了WHERE语句优化,但似乎找不到任何东西。欢迎所有链接和说明。

为这样的新手道歉...我们都必须从某个地方开始,对吧?

(*)使用SQLExplorer(我的IDE),是Squirrel SQL的Eclipse实现。

最佳答案

当查询中没有聚合函数时,我不确定服务器如何处理group by。根据您在评论中的答案,我将尝试添加以下内容:

SELECT
...,
SUM(SalesCost) as SalesCost,
SUM(SalesDollars) as SalesDollars
FROM
...


其余查询保留不变。

如果那不能解决问题,则您可能缺少索引。我将尝试找出是否有一个索引,其中WEEK_ID是唯一列,或者它是第一列。您还可以检查在同一索引表上是否还有另一个临时列(即TransactionDate或类似名称)。如果是这样,您可以在 where子句中使用它。

如果没有正确的索引,数据库服务器将被迫进行完整的表扫描,这可能会解释您的性能问题。 3,900万行从磁盘读取确实花费了不少时间。

还要检查WEEK_ID的数据类型是否为 int或类似值,以避免不必要的强制转换。

为了避免在Category表上进行表扫描,您需要确保同时为Category_Number编制索引。 (可能已经是,因为我认为它是该表的键。)

关于sql - 通过使天文查询更长的时间进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13844705/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com