数据库查询效率优化问题:

cadinfo 2003-07-11 08:28:37
从数据表TB002中选择25个记录,方法有如下两种:
---------------------------------------------------
1.
select top 25 * from TB002 where crbh='00' and cpxh not in (select top 0 cpxh from B03234 where crbh='00')
2.
select IDENTITY(int, 1,1) AS ID_Num,* into #temp from TB03234
select * from #temp where ID_Num between 1 and 15

----------------------------------------------------

由于B03234记录集较多,可能会达到10^7(n千万),这样查询效率明显降低,然而对于1.这个查询语句我用分析器查看过了,它的效率还和第二个select语句的top n有关,当n增大时,效率明显降低;对于2.本身效率就非常低;

我想这样可能可以使用增加递增id,通过select * from TB002 between m and n解决,存在的矛盾是,数据库中此类表很多,每行记录增加id,那么显然浪费了存储空间,请教有没有朋友可以在不添加id的前提之下提高此类查询效率的方法,先行谢过了!
...全文
119 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
cadinfo 2003-07-13
  • 打赏
  • 举报
回复
大力,谢谢你,在csdn上,你帮了我们很多忙,再怎么感谢都不为过

其实看到你的回复也就应该揭帖了,我不大会看执行计划,因此前面关于between的说法有误,因为实际操作中正如你说的

"如果你有一个完全连续的序号列,可以使用完全连续的序号列"

祝 工作顺利,心情愉快!
pengdali 2003-07-12
  • 打赏
  • 举报
回复
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)
是最好的办法,如果你有一个完全连续的序号列,可以使用完全连续的序号列
诺恒 2003-07-12
  • 打赏
  • 举报
回复
关注
qiubolecn 2003-07-12
  • 打赏
  • 举报
回复
对于数据库中表极大的取前多少位的查询,或取符合查询条件哪页的查询
请用两种办法。很多搜索引擎都是这样的
1、用临时表。
2、用游标。

具体请看大富翁中yysun对它的分析。忘了网页了,自己找去吧。
cadinfo 2003-07-11
  • 打赏
  • 举报
回复
小弟才疏学浅,不知道查询效率具体如何分析,不过刚才对100,000行记录表测试过了,通过添加id字段,发现效率分析如下:

a)select * from fwbmb where id between 99900 and 99925
预计行计算:111
预计子树成本:0.568

b)select top 25 * from b03234 where cpxh not in (select top 99900 cpxh from b03234)
预计行计算:25
预计子树成本:0.514

显然没有id的表通过b)语句查询,效率还稍微占优,看了以空间换时间(效率)不一定行得通!!!

不知道===大力===能否出来指点一下,这种分析方法是否正确!
cadinfo 2003-07-11
  • 打赏
  • 举报
回复
其实不知道两位朋友是否看到我的这句话:

“数据库中此类表很多,每行记录增加id,那么显然浪费了存储空间”

关键是我的数据库中该表数量较多,后几个字段的字节数也就30几个byte,想想实在没有必要添加4个字节的id字段,因为这样10,000,000×4/(1024*1024)=38.15M,即每张表增加38.15M,想想没有必要,不过有没有办法不增加id字段提升查询效率呢?

2.通过临时表显然不行!

另外有个问题,我的数据库以单个mdb文件存在,是否存在大小限制(因为库可能极大),如果用语句分表,如何操作,SQL会自动定位文件吗?

这个问题20分太少了,我会在解决之后继续放分,其实解决的方法不一定存在,重在互相交流,提高对效率的认识!
DragonBill 2003-07-11
  • 打赏
  • 举报
回复
我也同意 caiyunxia(monkey) 的观点,因为在 DataBase 中本身就存在 时间换空间 或是 空间换时间 的取舍,为了追求效率,舍弃一定的空间未尝不可。

当然,我还没想到在不舍弃空间而追求效率的最佳办法,想到了我再推翻自己的观点。哈哈~~~
caiyunxia 2003-07-11
  • 打赏
  • 举报
回复
存储空间不是重要的,关键是效率

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧