百万级数据查询效率问题

zhwb36 2009-05-23 04:40:39
加精
问题是这样的,表A 140万条数据,表B 临时表 350条数据,
我现在用这样的查询语句, select * from A where exists (select 1 from B where B.batchno=A.batchno)
A,B表靠batchno字段关联,字段类型为varchar(50),其中A表的batchno建了索引
数据库为sql server 2000, 查询时间大概在23-30之间
我做了一些测试,如果B表在200条数据以下,查询时间在5秒以内,为什么到了350条速度会慢这么多?
有没有办法做些优化处理?

谢谢!
...全文
3992 92 打赏 收藏 转发到动态 举报
写回复
用AI写文章
92 条回复
切换为时间正序
请发表友善的回复…
发表回复
firefly_celery 2012-10-22
  • 打赏
  • 举报
回复
我也碰到类似的问题,一个GPS数据表,每天的量都有可能超百万,而我需要查询这个GPS的某个时间段的是否停止了超过48小时
j361764406 2012-09-28
  • 打赏
  • 举报
回复
select A.* from B left outer join A ON B.batchno=A.batchno

A.batchno索引

lnmhfeng 2011-10-19
  • 打赏
  • 举报
回复
学习,后面很精彩
wsjrzjp 2011-10-17
  • 打赏
  • 举报
回复
[Quote=引用 75 楼 fenglingever 的回复:]
B是临时表?
实际存在的 就 对B的字段batchno加索引

如果B是查询过程生成的 建议对B的生成过程 进行优化
[/Quote]

方法不错
刘兄弟 2011-08-25
  • 打赏
  • 举报
回复
受教了 SELECT A.* FROM B LEFT JOIN A ON
yyz985 2010-04-07
  • 打赏
  • 举报
回复
batchno建立聚集索引
查询用join或者in
select * from A where batchno in (select batchno from B)
lxlchj_0303 2009-12-24
  • 打赏
  • 举报
回复
关注中~~
a15801323169 2009-12-20
  • 打赏
  • 举报
回复
这几天被一个百万级数据量的表搞懵了,查询条件组合复杂,查询时间还要求两秒以内,快崩溃了。
zhangle1987 2009-11-24
  • 打赏
  • 举报
回复
[Quote=引用 79 楼 shendl 的回复:]
select * from A where batchno in(select batchno  from B where ...)
    这样应该最快吧
[/Quote]

同意这位同学的意见
yidichaxiang 2009-11-24
  • 打赏
  • 举报
回复
关注,
Mirana_NightShade 2009-11-24
  • 打赏
  • 举报
回复
还没结果?这么多仁兄帮忙,贴还没结啊
山书生 2009-11-23
  • 打赏
  • 举报
回复
这个是好话题。我也遇到百万级数据问题……学习:)
aploo 2009-07-16
  • 打赏
  • 举报
回复
uuup
良少 2009-06-12
  • 打赏
  • 举报
回复
select * from A where batchno in(select batchno from B where ...)
这样应该最快吧
xiaoxiaoyuxie 2009-06-11
  • 打赏
  • 举报
回复
同意61楼
hubo888168 2009-06-11
  • 打赏
  • 举报
回复
我看到了 "字段类型为varchar(50)"..
相当邪恶啊
gzy5513536 2009-06-11
  • 打赏
  • 举报
回复
数据库优化,永恒的话题
lxkim 2009-06-11
  • 打赏
  • 举报
回复
字符串长度有限制吧?
[Quote=引用 73 楼 super_marshal 的回复:]
引用 71 楼 zhwb36 的回复:
引用 30 楼 super_marshal 的回复:
不要用两个表的连接
先把B表中的batchno
用select batchno from B
查出来
组成字符串(batchno1,batchno2,batchno3,batch4,......)
再select * from A where batchno int(batchno1,batchno2,batchno3,batch4,......)

最近做的一个项目里要处理日志记录,日志表好几百万条,我用连接查询半天出不来
后来分开一个一个表查,把限制条件先保存就快…
[/Quote]
fenglingever 2009-06-11
  • 打赏
  • 举报
回复
B是临时表?
实际存在的 就 对B的字段batchno加索引

如果B是查询过程生成的 建议对B的生成过程 进行优化
super_marshal 2009-05-27
  • 打赏
  • 举报
回复
[Quote=引用 71 楼 zhwb36 的回复:]
引用 30 楼 super_marshal 的回复:
不要用两个表的连接
先把B表中的batchno
用select batchno from B
查出来
组成字符串(batchno1,batchno2,batchno3,batch4,......)
再select * from A where batchno int(batchno1,batchno2,batchno3,batch4,......)

最近做的一个项目里要处理日志记录,日志表好几百万条,我用连接查询半天出不来
后来分开一个一个表查,把限制条件先保存就快多了


兄弟,你的方法虽然粗糙些…
[/Quote]
大哥。。。。。
怎么能说我的方法糙呢
加载更多回复(71)

22,209

社区成员

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

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