求最优查询(选取每一天的数据)

summerain 2003-10-16 11:40:00
有这样一张表,表的数据比较大,每天新增数据40万条,需及时删除过期数据。表有一个字段aa,设置为自增长,为主键,另有一个时间字段bb,没有索引。我想做到如下:查询每天的数据并导出,然后删除7天前的数据。我写出的查询语句性能不让人满意,求最优化的查询语句,可查询出一天的数据。在线等,谢谢大家。
...全文
32 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
summerain 2003-10-16
  • 打赏
  • 举报
回复
按LengyuYuan(冷雨) 的意思,建立索引,然后使用bb>=@日期 and bb<dateadd(dd,1,@日期)的效果比使用DATEDIFF()函数要好,是吗?
aierong 2003-10-16
  • 打赏
  • 举报
回复
create index indexname
on tablename(bb)
在时间字段上面建立索引,最好建聚集索引,不过你有主建啦,就建非聚集索引吧

select * from tablename
where bb < dateadd(day,-7,datename(year,getdate())+datename(mm,getdate())+datename(day,getdate()))

这样可以利用索引查询啦
前7天数据
summerain 2003-10-16
  • 打赏
  • 举报
回复
依sdhdy(大江东去...) 的意思,使用DATEDIFF()函数不能获得最佳性能,是吗?
LengyuYuan 2003-10-16
  • 打赏
  • 举报
回复
To txlicenhe:

datediff(day,时间字段,@日期) = 0

在時間上加索引,然後在對字段作運算,索引就會失效
summerain 2003-10-16
  • 打赏
  • 举报
回复
我在时间段建索引是不是每次删除表中过期数据后都必须重建索引?
aierong 2003-10-16
  • 打赏
  • 举报
回复
时间字段bb要建立索引
你数据量大,这样查询会快些
sdhdy 2003-10-16
  • 打赏
  • 举报
回复
--modify
另外,查询时尽量对该字段少使用函数进行比较
伍子V5 2003-10-16
  • 打赏
  • 举报
回复
显示当天数据
select * from tablename where datediff(day,时间字段,getdate())=0

删除前七天数据

delete tablename where datediff(day,时间字段,getdate())>7
sdhdy 2003-10-16
  • 打赏
  • 举报
回复
在时间字段上加索引
另外,查询时尽量对该字段使用函数
txlicenhe 2003-10-16
  • 打赏
  • 举报
回复
1:时间字段加索引
2: select * from 表 where datediff(day,时间字段,@日期) = 0
伍子V5 2003-10-16
  • 打赏
  • 举报
回复
很明显你要在时间字段做索引嘛
然后就以时间字段操作即可
aierong 2003-10-16
  • 打赏
  • 举报
回复
查询时尽量对时间字段少使用函数

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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