CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  疑难问题

获取各类别下前3条产品信息,请达人帮助优化!致谢!

楼主birdxxxx(爱上老鼠的猫)2005-08-02 06:22:27 在 MS-SQL Server / 疑难问题 提问

有两个表: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

相关问题

  • 好久没来了,散分,同时向给我帮助的人致谢!
  • 请求您的帮助,帮我优化这段代码
  • [求助]关于获取当前Context的问题,请求帮助!!!!
  • 致谢RONGRONG。
  • 优化
  • 优化
  • 多网卡多IP信息获取问题,请高手帮助,谢谢!
  • 我有一个listview,从SQL Server 数据库中获取了一万条记录。显示非常的慢。请问大虾如何优化?<高分相送>
  • 关于程序执行效率的优化(大家都来看看吧,给我点启发和帮助)
  • 明天毕业答辩了,毕设在csdn获得不少帮助,在此向各位csdn的朋友致谢,送分!!

关键词

  • 语句
  • top
  • categoryid
  • parentfrontcategoryid
  • frontcategoryid
  • frontcategory
  • productid
  • bwhere
  • productname
  • 产品

得分解答快速导航

  • 帖主:birdxxxx
  • bugchen888
  • libin_ftsafe

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo