我也同意  caiyunxia(monkey) 的观点,因为在 DataBase 中本身就存在 时间换空间 或是 空间换时间 的取舍,为了追求效率,舍弃一定的空间未尝不可。当然,我还没想到在不舍弃空间而追求效率的最佳办法,想到了我再推翻自己的观点。哈哈~~~

解决方案 »

  1.   

    其实不知道两位朋友是否看到我的这句话:“数据库中此类表很多,每行记录增加id,那么显然浪费了存储空间”关键是我的数据库中该表数量较多,后几个字段的字节数也就30几个byte,想想实在没有必要添加4个字节的id字段,因为这样10,000,000×4/(1024*1024)=38.15M,即每张表增加38.15M,想想没有必要,不过有没有办法不增加id字段提升查询效率呢?2.通过临时表显然不行!另外有个问题,我的数据库以单个mdb文件存在,是否存在大小限制(因为库可能极大),如果用语句分表,如何操作,SQL会自动定位文件吗?这个问题20分太少了,我会在解决之后继续放分,其实解决的方法不一定存在,重在互相交流,提高对效率的认识!
      

  2.   

    小弟才疏学浅,不知道查询效率具体如何分析,不过刚才对100,000行记录表测试过了,通过添加id字段,发现效率分析如下:a)select * from fwbmb where id between 99900 and 99925
    预计行计算:111
    预计子树成本:0.568b)select top 25 * from b03234 where cpxh not in (select top 99900 cpxh from b03234)
    预计行计算:25
    预计子树成本:0.514显然没有id的表通过b)语句查询,效率还稍微占优,看了以空间换时间(效率)不一定行得通!!!不知道===大力===能否出来指点一下,这种分析方法是否正确!
      

  3.   

    对于数据库中表极大的取前多少位的查询,或取符合查询条件哪页的查询
    请用两种办法。很多搜索引擎都是这样的
     1、用临时表。
     2、用游标。具体请看大富翁中yysun对它的分析。忘了网页了,自己找去吧。
      

  4.   

    1、在现有的sqlserver版本中,实现分页
    declare @SQLStr varchar(8000)
    set @SQLStr='SELECT Top '+cast(@每页大小 as varchar)+' * FROM 表 WHERE 主键列 NOT IN (SELECT TOP '+cast(@每页大小*@第几页 as varchar)+' 主键列 from 表 )'
    exec(@SQLStr)
    是最好的办法,如果你有一个完全连续的序号列,可以使用完全连续的序号列
      

  5.   

    大力,谢谢你,在csdn上,你帮了我们很多忙,再怎么感谢都不为过其实看到你的回复也就应该揭帖了,我不大会看执行计划,因此前面关于between的说法有误,因为实际操作中正如你说的"如果你有一个完全连续的序号列,可以使用完全连续的序号列"祝 工作顺利,心情愉快!