ITPub博客

首页 > > > SQL Tips:大数据量下的数据库日期操作问题

SQL Tips:大数据量下的数据库日期操作问题

作者:unnamed persona 时间:2019-11-28 13:43:34 0 删除 编辑

说明:以下数据库操作基于SQL Server 2000

问题出现:

假设一个新闻系统,你需要获取最近一周的热点文章,一定会使用类似下面的SQL语句:

select top 50 newsID, newsTitle, newsRead from newstable where datediff("d", newsTime, getdate())<7 order by newsRead desc

只要对newsID,newsRead,newsTime都有索引,用查询分析器分析成本发现成本非常小,在newstable数据量小的情况下,访问速度非常快。可是最近发现,当newstable到达200万条记录的时候,这条看似简单的语句执行居然要1分钟以上。

 

解决问题:

这个问题排查比较简单,去掉order by一样很慢,只能断定是datediff造成的。我们尝试把上面的语句分成2段:

第一条语句:select min(newsID) from newstable where datediff("d", newsTime, getdate())<7

第二条语句:select top 50 newsID, newsTitle, newsRead from newstable where newsID>[minID] order by newsRead desc

其中[minID]是第一条语句的结果,我们发现:第二条语句执行非常快,关键是第一条慢。newsID和newsTime均有索引,这是为什么呢?

 

换一个思路,第一条语句基本等价为

第三条语句:select max(newsID) from newstable where datediff("d", newsTime, getdate())>=7

奇怪了,第三条语句执行起来飞快,虽然问题是曲线解决了,可这又是为什么?难道和索引的排序次序有关?欢迎大家讨论。

 

————————————————

版权声明:本文为CSDN博主「zdg」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/zdg/article/details/599057

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69949628/viewspace-3149792/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-12-04

  • 博文量
    158
  • 访问量
    0