获取各类别下前3条产品信息,请达人帮助优化!致谢!
有两个表:Category表(产品目录表)和Product表(产品表),Category表里有两级,表结构如下:
CategoryID,ParentCategoryID
最上级的ParentCategoryID值为0
Product表中的数据目前大约3000条
我想获取每个目录下面的前3条数据,用如下方法:
SELECT A.ProductID,A.ProductName,A.CategoryID FROM Product A,Category B
WHERE A.ProductID IN
(SELECT TOP 3 ProductID FROM Product WHERE CategoryID=A.CategoryID)
AND A.CategoryID=B.CategoryID AND B.ParentFrontCategoryID IN
(SELECT FrontCategoryID FROM FrontCategory WHERE ParentFrontCategoryID='0')
ORDER BY A.FrontCategoryID
语句倒是比较简单,可在查询分析器里执行的平均时间要用到9秒,太慢了,客户受不了。
我不知道如何优化了,请达人提供优化解决方案,100分致谢!
问题点数:100、回复次数:7Top
1 楼birdxxxx(爱上老鼠的猫)回复于 2005-08-02 06:23:48 得分 0
查询语句里面的FrontCategory实际上就是Category,写的时候没注意改过来。Top
2 楼bugchen888(臭虫)回复于 2005-08-02 10:38:39 得分 50
“A.CategoryID=B.CategoryID”在这两列上建索引。
“ParentFrontCategoryID='0'”在这列上建索引。Top
3 楼libin_ftsafe(子陌红尘:TS for Banking Card)回复于 2005-08-02 11:13:55 得分 50
在关联字段都已建索引的前提下,SQL 语句稍改一下:
----------------------------------------------------------------------------------
SELECT
A.ProductID,
A.ProductName,
A.CategoryID
FROM
Product A,Category B
WHERE
A.ProductID IN(SELECT TOP 3 ProductID FROM Product WHERE CategoryID=A.CategoryID)
AND
A.CategoryID=B.CategoryID
AND
EXISTS(SELECT 1 FROM FrontCategory WHERE FrontCategoryID=B.ParentFrontCategoryID AND ParentFrontCategoryID='0')
ORDER BY
A.FrontCategoryIDTop
4 楼birdxxxx(爱上老鼠的猫)回复于 2005-08-02 21:11:05 得分 0
谢谢二位回答,刚从外面回来,送分先。Top
5 楼birdxxxx(爱上老鼠的猫)回复于 2005-08-02 21:19:12 得分 0
抱歉二位,我刚才给分结贴,系统老是提示:
,50,50,
只有未结、非0分贴子才可以结贴给分
我不知道是什么问题,明天再来试一下。Top
6 楼birdxxxx(爱上老鼠的猫)回复于 2005-08-02 21:19:16 得分 0
抱歉二位,我刚才给分结贴,系统老是提示:
,50,50,
只有未结、非0分贴子才可以结贴给分
我不知道是什么问题,明天再来试一下。Top
7 楼iwl()回复于 2005-08-29 00:14:37 得分 0
SELECT
A.ProductID,
A.ProductName,
A.CategoryID
FROM
Product A,Category B
WHERE
A.ProductID IN(SELECT TOP 3 ProductID FROM Product WHERE CategoryID=A.CategoryID)
AND
A.CategoryID=B.CategoryID
AND
EXISTS(SELECT 1 FROM FrontCategory WHERE FrontCategoryID=B.ParentFrontCategoryID AND ParentFrontCategoryID='0')
ORDER BY
A.FrontCategoryID
Top




