CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  基础类

请大家帮我看下这个奇怪问题!(100分相送)

楼主bzlj(bzlj)2002-04-15 17:44:43 在 MS-SQL Server / 基础类 提问

在sql   server7.0中:  
  假设在A表中(id,itemid)等字段,id是主键,id,itemid都是索引(int型)。我在这样查询时:  
  select   *   from   A   where   itemid   =   :l_number;  
  正常情况下,只需要1、2秒中,就可查处所需要的信息(数据很多)。但itemid对应有几个值时,速度特别慢,要30、40秒,即使itemid的值对应的记录是空,也要那么长时间。  
  我在不同机器上试过,我开始以为是我的库有问题,但情况都是这样。  
  谢谢大家帮我解答。 问题点数:100、回复次数:15Top

1 楼leimin(黄山光明顶)回复于 2002-04-15 17:55:09 得分 10

1。试试将ITEMID的INDEX去掉?  
  2。安装SQL   SP3,(try)Top

2 楼bzlj(bzlj)回复于 2002-04-15 19:21:14 得分 0

老大,能否说详细点,SP3是做什么用的?Top

3 楼dudupi()回复于 2002-04-15 20:52:48 得分 10

sql的补丁3Top

4 楼bluepower2008(蓝色力量)回复于 2002-04-15 21:08:09 得分 10

应该不会啊,如果你的语句是itemid   in   (1,2,3),那么sqlserver会自动优化的,不过不知道7.0是不是也优化。你这样试试:  
  select   *   from   A   where   itemid   =   1  
  union  
  select   *   from   A   where   itemid   =   2  
  union  
  select   *   from   A   where   itemid   =   2  
  这种方式可以充分利用索引。  
  Top

5 楼bzlj(bzlj)回复于 2002-04-15 21:40:06 得分 0

itemid   =   :l_number,就只是等于一个值,不存在用IN。  
  大哥们继续啊。我是一点都不知道怎么办了!Top

6 楼huier22(终结孤独)回复于 2002-04-15 21:52:55 得分 5

upTop

7 楼bluepower2008(蓝色力量)回复于 2002-04-16 21:25:36 得分 0

>>但itemid对应有几个值时,速度特别慢,要30、40秒  
                                ^^^^^^^  
  那以上这句话的对应的几个值是什么意思?Top

8 楼bzlj(bzlj)回复于 2002-04-16 22:41:12 得分 0

呵呵,不好意思。itemid   =   @l_number,@l_number是个单值,不是集合。Top

9 楼xjbs(大鱼)回复于 2002-04-16 22:50:56 得分 5

看不明白Top

10 楼OldMan0516(凡人0516)回复于 2002-04-17 08:12:43 得分 5

你的意思是否是这样:  
  如果查询itemid   =   :l_number只是返回一条纪录很快,  
  如果多条很慢?Top

11 楼PopsInSeoul(World台 星期四 18:30)回复于 2002-04-17 09:59:21 得分 40

应该oldman0516(凡人0516)   理解的对  
   
  试一下看:  
  把索引改一下,id的主键去掉,itemid改成簇索引。Top

12 楼bzlj(bzlj)回复于 2002-04-17 22:29:45 得分 0

to:OldMan0516(凡人0516)    
  这样说吧。假设有A、B两表。A(ITEMID)表是销售人员表。B(ITEMID)是销售明细表。现在想从B表中查出A销售人员的销售明细。ITEMID就是人员的ID号。  
  语句:  
  select   *   from   tb_b   where   itemid   =   @A人员的ID;  
  正常情况下,1秒内就应该显示A的销售明细(1000多条),但我却等了40秒钟才显示A的销售明细。为什么?(我在查B、C、D等人员的销售明细时,用时都在一秒内。)为什么查A时会这样???  
  我重建过索引,没用。Top

13 楼bluepower2008(蓝色力量)回复于 2002-04-17 23:22:24 得分 0

那么B、C、D等人员的销售明细有多少条记录呢?Top

14 楼icevi(按钮工厂)回复于 2002-04-18 00:07:02 得分 10

搞不懂,应该与记录数多少有关系,但不至于慢这么多。  
  顺便说一下象下面这样的语句,不会有重复记录的,用union   all   会快很多,   因为用UNION要排除重复项,用UNION   ALL   不需要。  
  select   *   from   A   where   itemid   =   1  
  union   all  
  select   *   from   A   where   itemid   =   2  
  union   all  
  select   *   from   A   where   itemid   =   2  
  Top

15 楼leimin(黄山光明顶)回复于 2002-04-18 08:29:42 得分 5

还是把表结构贴出来会比较清楚点。  
  因为你的问题太奇怪?  
  ---我在查B、C、D等人员的销售明细时,用时都在一秒内。)为什么查A时会这样???  
  Top

相关问题

  • 帮忙高分相送!我碰到一个奇怪的问题.
  • 帮忙高分相送!我碰到一个奇怪的问题.
  • 帮忙高分相送!我碰到一个奇怪的问题.
  • 帮忙高分相送!我碰到一个奇怪的问题.
  • 奇怪的问题!!!高分相送!
  • 关于日期的奇怪问题,大家能帮我找出问题吗?高分相送
  • 奇怪的问题,关于字符串相加,帮忙看看?
  • 奇怪的问题:关于数据源(高分相送)
  • BLOB很奇怪的问题,高分相送!
  • 帮帮忙,奇怪问题!!!!

关键词

  • 销售
  • 语句
  • itemid
  • 索引
  • 销售明细
  • 值
  • 人员
  • union
  • 记录
  • from a where

得分解答快速导航

  • 帖主:bzlj
  • leimin
  • dudupi
  • bluepower2008
  • huier22
  • xjbs
  • OldMan0516
  • PopsInSeoul
  • icevi
  • leimin

相关链接

  • SQL Server类图书

广告也精彩

反馈

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