SQL

草枯鹰眼疾,雪尽马蹄轻

首页 CNDEV 网志 联络 (RSS 2.0) (Atom) 登录
  随笔 23 :: 收藏 7 :: 评论 0 :: 寻迹: 0

随笔归档

收藏

图库

狐朋狗友

藕断丝连

2004-06-16 #

[问题来源]

Sybase数据库,表RBase_YPCode结构如下:

Create Table RBase_YPCode(
YPBM    char(16)    not null,
YPMC    char(255)   not null,
SJBM    char(16)    not null,
CYBZ    char(1) not null,
YZ  char(1) not null,
EQBM    char(8) null,
JDCC    int null,
YPDC    char(1) DEFAULT  '2'    null,
DYCWBM  char(15)    null,
constraint RBase_YPCode_2260998461 PRIMARY KEY  CLUSTERED ( YPBM)
)

表中现有数据1800条,用Select * From RBase_YPCode查询,用了7000~8000ms。何以这么慢?

[测试方法]

方法一:在Delphi中利用TBatchMove从RBase_YPCode中将数据导入RBase_YPCode2(TBatchMove创建,没有主键和其它constraint),然后用Select * From RBase_YPCode查询,用了1400~1500ms。然后加上contraint:

Alter Table RBase_YPCode2
Add  Constraint  RBase_YPCode_2260998461 PRIMARY KEY  CLUSTERED (YPBM),此时RBase_YPCode2的constraint和RBase_YPCode完全一样,再用Select * From RBase_YPCode2查询,所用时间也在1400~1500ms之间,没有明显变化。

方法二:使用上面创建表的语句(绿色字部分)创建表RBase_YPCode3,然后利用下面SQL往RBase_YPCode3中导入数据:

Insert Into RBase_YPCode3 Select * From RBase_YPCode

然后用Select * From RBase_YPCode3查询,用了5400~6000ms。然后加上contraint,查询时间差不多。

[问题提出]

说明:上面两种方法中加contraint的目的不是为了提高查询速度,仅是为了保持和原表RBase_YPCode3结构一致。

那么,两种方法创建的表的结构一致,数据相同,何以查询时间竟差了将近3000ms?而且,为何新建的表比原来的查询速度也至少快了1000ms?

不解,暂存,留待日后解决吧。

发表于 @ 16:29 | 评论与反馈 (2)