*作为第一个注意事项,我只能读取我的服务器。只是,仅供参考,因为它似乎来了很多......组通过使查询天文学更长
服务器:DB2(6.1),其中i(IBM)
我有一个查询,我就在它有19mil行的表运行(我不设计它们,我只是查询它们)。我一直限制我的返回数据为10行(*),直到我得到这个查询整理出来,以便返回时间有点合理。
的基本设计是,我需要得到的数据有关的按周基础上,我们在一个星期卖的产品类别,使用列:WEEK_ID,和类别。这里的示例代码(有一些重要的位####出)。
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 2--Format is year/week
GROUP BY WEEK_ID, CATEGORY
如果我注释掉最后一行,我可以在254毫秒拿回100行。如果我把这条线放回我的回归时间比我耐心等待的时间要长:-)。 (最长我等了10分钟。)
这个问题有两个部分。第一个问题很简单:这是正常的吗?有50个类别(粗略)和140个星期(左右),我试图压缩。我意识到这是很多信息来冷凝19mil行,但我希望限制我的查询10行返回将最小化时间?
而且,如果我不只是一个完整的n00b,这其实不应该需要几分钟的时间,究竟是什么毛病我的SQL?
我谷歌搜索WHERE语句优化,似乎无法找到任何东西。所有的链接和解释都是值得欢迎的。
道歉这样的新手帖子...我们都必须从某个地方开始,对吧?
(*)使用SQLExplorer视窗,我的IDE,一个Eclipse实现松鼠的SQL。
为什么'group by'?我看不到聚合..? –
你是否真的在寻找'distinct',有任何机会? –
好问题。对于每个日期/类别组合,都有几千个不同的条目(至少当你考虑表中的所有信息时)。但是对于我拉回来的数据,我并不关心那些不同的列,试图折叠行。我应该使用Select Distinct吗?既然我不拉回不同的行? –