SQL Tips:大数据量下的数据库日期操作问题
2006-02-14 22:29
351 查看
说明:以下数据库操作基于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奇怪了,第三条语句执行起来飞快,虽然问题是曲线解决了,可这又是为什么?难道和索引的排序次序有关?欢迎大家讨论。
问题出现:
假设一个新闻系统,你需要获取最近一周的热点文章,一定会使用类似下面的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奇怪了,第三条语句执行起来飞快,虽然问题是曲线解决了,可这又是为什么?难道和索引的排序次序有关?欢迎大家讨论。
相关文章推荐
- SQL Tips:大数据量下的数据库日期操作问题
- 大数据量下的数据库日期操作问题
- 数据库批量操作中SqlParameter参数传递的问题
- 总结一些关于操作数据库是sql语句还是存储过程问题
- 解决mybatis继承SqlSessionDaoSupport方式操作数据库不打印sql日志的问题。
- 解决pl/sql devloper 中数据库操作语句中文乱码的问题
- 2.如何优化操作大数据量数据库(改善SQL语句)
- 1个SQL操作数据库的问题
- Delphi XE8中开发DataSnap程序常见问题和解决方法 (二)想对DBExpress的TSQLDataSet写对数据库操作的SQL语句出错了!
- 如何优化操作大数据量数据库(几十万以上数据)(二。改善SQL语句)
- JAVA中数据库操作中sql语句遇到的问题
- 解决JDBC操作数据库日期类型数据时无法精确到秒的问题
- 如何优化操作大数据量数据库——改善SQL语句(转)
- Delphi XE8中开发DataSnap程序常见问题和解决方法 (二)想对DBExpress的TSQLDataSet写对数据库操作的SQL语句出错了!
- sql:日期操作注意的,如果以字符串转日期时的函数,因为数据量大,会出问题
- [网络问题,截图以后再传]本实验是设计性实验。目的在于使用关系数据库标准语言SQL,掌握视图和索引的操作。
- python json及mysql——读取json文件存sql、数据库日期类型转换、终端操纵mysql及python codecs读取大文件问题
- 2.如何优化操作大数据量数据库(改善SQL语句)
- 【SQL】常用数据库操作及面试问题总结 - 学生老师课程学分
- python json及mysql——读取json文件存sql、数据库日期类型转换、终端操纵mysql及python codecs读取大文件问题