如何提高数据表的查询速度?

long7411 2010-03-31 12:03:05

有一表存放了几年的数据,有50000多条,但最常用的是近几天的数据1000条左右,我想要查询最常用的数据时速度快一点,该怎么实现?
select date,tt from tb where date>'2010-03-29'
...全文
141 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
苏飞论坛 2010-04-01
  • 打赏
  • 举报
回复

--建立索引
create index idx_date on tb(date desc)
go

select top 100 * from tab;

还建议你在前台分一下页,分页用存储过程 这样会很快的,
给你个分页的存储过程 是通用的啊
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

ALTER PROCEDURE [dbo].[Psp_SetPagination]
(
@vc_Table varchar(50),--表名
@vc_SqlWhere varchar(1000)='',--条件
@vc_SqlOrder varchar(1000)='',--排序规则
@vc_SqlFile varchar(1000)='*',--选取字段
@vc_Key varchar(50)='',--关键字
@vc_FieldType varchar(50)='',--字段类型
@i_PageSize int=1,--分页大小
@i_PageIndex int=1,--页面索引
@bt_Count bit --在统计吗?
)
As
set nocount on
Declare @vc_Sql varchar(5000)
if @bt_Count=1
BEGIN
set @vc_Sql='select count(*) from '+@vc_Table+' '+@vc_SqlWhere
END
ELSE
BEGIN
set @vc_Sql='Declare @indexTable Table(Id decimal identity(1,1),Temp_Key '+@vc_FieldType+ ')'+char(13)
set @vc_Sql=@vc_Sql+
'Declare @PageLowerBound int'+char(13)
set @vc_Sql=@vc_Sql+
'Declare @PageUpperBound int'+char(13)
set @vc_Sql=@vc_Sql+
'set @PageLowerBound='+cast((@i_PageIndex-1)*@i_PageSize as varchar(8))+char(13)
set @vc_Sql=@vc_Sql+
'set @PageUpperBound=@PageLowerBound+'+cast(@i_PageSize as varchar(8))+char(13)
set @vc_Sql=@vc_Sql+
'set rowcount @PageUpperBound'+char(13)
set @vc_Sql=@vc_Sql+
'Insert into @indexTable(Temp_Key)'+
'Select '+@vc_Key+' from '+@vc_Table+' '+@vc_SqlWhere+' '+@vc_SqlOrder+char(13)
if @vc_SqlWhere<>''
begin
set @vc_SqlWhere=@vc_SqlWhere+' and '+@vc_Key+'=t.Temp_Key and t.Id>@PageLowerBound and t.Id<=@PageUpperBound'
end
else
begin
set @vc_SqlWhere='Where '+@vc_Key+'=t.Temp_Key and t.Id>@PageLowerBound and t.Id<=@PageUpperBound'
end
set @vc_Sql=@vc_Sql+
'Select '+@vc_SqlFile+' from '+@vc_Table+',@indexTable t '+@vc_SqlWhere+' Order by t.Id'
END
EXEC(@vc_Sql)

我博客上还有例子你也可以过来看看的
介绍一下和AspNetPager结合的不错的分页方案
http://www.cnblogs.com/sufei/archive/2009/08/11/1543530.html
libinlink 2010-04-01
  • 打赏
  • 举报
回复

--方案一,建立索引
create index idx_date on tb(date desc)
--方案二,建立一个同结构的数据表,只存放最近几天的数据
create table tb2
(

)
当然,在插入数据时,需要同时维护2个表,但是却可以获得最好的查询效率
Leshami 2010-04-01
  • 打赏
  • 举报
回复
需要在date上增加逆序索引,如果数据太量可以用分区表实现数据转移,下面是实现分区表的链接地址:
http://blog.csdn.net/robinson_0612/archive/2009/11/07/4783702.aspx
yjwcwrkks 2010-04-01
  • 打赏
  • 举报
回复
加索引
999朵玫瑰 2010-04-01
  • 打赏
  • 举报
回复
建索引。顶一楼
ACMAIN_CHM 2010-04-01
  • 打赏
  • 举报
回复
创建索引 ( date)
feixianxxx 2010-04-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 htl258 的回复:]
SQL code

加个逆序索引,如果原来已存在就先删除
create index idx_date on tb(date desc)
[/Quote]
可以尝试
gll0809 2010-04-01
  • 打赏
  • 举报
回复
引用六楼的回复:
给字段加上索引在检索效率上有所提高,不过要在数据量大的情况下体现得比较明显,如果数据量有几十W的话还可以采用分页

前不久给济铁电台做网络管理系统时就是这样做的。
东那个升 2010-03-31
  • 打赏
  • 举报
回复
50000条数据不多。。。
leo_lesley 2010-03-31
  • 打赏
  • 举报
回复
在 date 字段上加索引
htl258_Tony 2010-03-31
  • 打赏
  • 举报
回复

加个逆序索引,如果原来已存在就先删除
create index idx_date on tb(date desc)
bo8362 2010-03-31
  • 打赏
  • 举报
回复
学习了~~~~~~
--小F-- 2010-03-31
  • 打赏
  • 举报
回复
索引...昨天刚和老大探讨过..
wo_happy 2010-03-31
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 ldslove 的回复:]
50000条数据不多。。。
[/Quote]

up

要是做题或考试的话就

create index idx_date on tb(date desc)
go

select top 100 * from tab;


SQL77 2010-03-31
  • 打赏
  • 举报
回复
把历史数据转走吧
水中影子 2010-03-31
  • 打赏
  • 举报
回复
建立索引是很好的做法

也可以取一部分select top 100 from tab
小坏猪猪 2010-03-31
  • 打赏
  • 举报
回复
给字段加上索引在检索效率上有所提高,不过要在数据量大的情况下体现得比较明显,如果数据量有几十W的话还可以采用分页
htl258_Tony 2010-03-31
  • 打赏
  • 举报
回复
如果加了逆序索引,对性能提升还是有帮助的.
rfq 2010-03-31
  • 打赏
  • 举报
回复
50000条
应该没有问题

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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