如何提高查询上千万数据库表的速度?

y252999822 2011-04-20 09:09:05
如何提高查询上千万数据库表的速度?

用下面的查询语句 用了5分11秒 共 23671149条

select count(*) as a from tworkhis 速度太慢了

而且我要用的查询语句是下面的存储过程

麻烦各位高手帮忙解决下!!

ALTER proc [dbo].[prc_seqcode]
(
@workline varchar(10),--组别
@startTime varchar(8),--日期 如:2011-3-1
@endTime varchar(8), --时间段 如:00:00:00
@selDate varchar(10),--结束时间段 如:23:00:00
@check char(1)--区分不同的查询语句
)
as
begin
if @check=0
begin
select seqcode ,count(*) count_output
from tworkhis where workline =@workline
and frtime between convert(varchar(10),getdate(),120) +' '+@startTime
and convert(varchar(10),getdate(),120) +' '+@endTime group by seqcode
end
if @check=1
begin
select seqcode ,count(*) count_output
from tworkhis where workline =@workline
and frtime between @selDate +' '+@startTime
and @selDate +' '+@endTime group by seqcode
end
end
...全文
222 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhongzheng724 2011-04-20
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 zhongzheng724 的回复:]

引用 15 楼 tony312ws 的回复:

引用 9 楼 zhongzheng724 的回复:

不应该count(*)
你要count(主键)

还有查询适量的数据,不会太慢滴。

还有建立索引
根据自己的需要查询

是的,现在我对千万数据量查询,都不感冒了。很正常的。
用sqlserver查都不会太慢。
用mysql查,更快了。
[/Quote]
用mysql count(主键) 三个字段,四千万行数据,只需要0秒。
貌似没有缓存,我都隔了好久才查的。
zhongzheng724 2011-04-20
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 tony312ws 的回复:]

引用 9 楼 zhongzheng724 的回复:

不应该count(*)
你要count(主键)

还有查询适量的数据,不会太慢滴。

还有建立索引
根据自己的需要查询
[/Quote]
是的,现在我对千万数据量查询,都不感冒了。很正常的。
用sqlserver查都不会太慢。
用mysql查,更快了。
tony312ws 2011-04-20
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 zhongzheng724 的回复:]

不应该count(*)
你要count(主键)

还有查询适量的数据,不会太慢滴。
[/Quote]
还有建立索引
根据自己的需要查询
zzxap 2011-04-20
  • 打赏
  • 举报
回复
lucene.net是用空间换时间的
子夜__ 2011-04-20
  • 打赏
  • 举报
回复
可否考虑 分页 分块查询。。
zhongzheng724 2011-04-20
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 li520na 的回复:]

楼主用lucene.net吧,这个做数据库查询上千万条数据也只是一秒的时间
[/Quote]
而且索引文件比数据量还大!


zhongzheng724 2011-04-20
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 li520na 的回复:]

楼主用lucene.net吧,这个做数据库查询上千万条数据也只是一秒的时间
[/Quote]
需要两三秒!
李班头 2011-04-20
  • 打赏
  • 举报
回复
楼主用lucene.net吧,这个做数据库查询上千万条数据也只是一秒的时间
zhongzheng724 2011-04-20
  • 打赏
  • 举报
回复
不应该count(*)
你要count(主键)

还有查询适量的数据,不会太慢滴。
zzxap 2011-04-20
  • 打赏
  • 举报
回复
表分区
harvesthouhao 2011-04-20
  • 打赏
  • 举报
回复
再怎么分页,count出总条数也是必备参数呀!分库吧。或者用lucene.net
zhangfk 2011-04-20
  • 打赏
  • 举报
回复
建索引了吗,
zzxap 2011-04-20
  • 打赏
  • 举报
回复
http://hi.baidu.com/irinihp/blog/item/3c72fdcb30c944f852664fa4.html
kingdom_0 2011-04-20
  • 打赏
  • 举报
回复
建立索引,分页查找,在一个页面上你不可能把数据都显示出来吧
lanqiang456 2011-04-20
  • 打赏
  • 举报
回复
你要想想 大哥 你2000多W条 他能不卡吗? 大不了你建个索引`````
zzxap 2011-04-20
  • 打赏
  • 举报
回复
select rows from sysindexes where id = object_id('tablename') and indid in (0,1)
sysindexes 系统表中拥有至少一条其他表的记录,其中rows记录总数,object_id('tablename')表示转换成表对应在sysindexes 的id编号, indid 表示是具体的对象,当表没有聚簇索引时,Indid = 0 否则为 1,这比count快的多
qq346127416 2011-04-20
  • 打赏
  • 举报
回复
合理建索引 把数据分表 分页存储过程 。。

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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