大数据量如何优化sql语句

zhangweitc123 2015-12-03 04:57:35

select * from ( select * from Login201511 union all select * from Login201512)x
where Explain like '%%' and Contents like '%%' and Id not in(
select top 0 Id from ( select * from Login201511 union all select * from Login201512) y
where Explain like '%%' and Contents like '%%'
and DATEDIFF(SECOND,'2015-11-01 16:34:42',time)>=0
and DATEDIFF(SECOND,time,'2015-12-01 16:34:51')>=0
order by time desc,Id desc )
and DATEDIFF(SECOND,'2015-11-01 16:34:42',time)>=0
and DATEDIFF(SECOND,time,'2015-12-01 16:34:51')>=0
order by time desc,id desc

说明:LoginyyyyMM表中,一张表的数据量大概是500万,现在查询用时为54秒,数据量为5408586条。中间的子查询是加的分页,也可以换成25,50,100等等。
请问如何优化当前sql语句,太慢了,请提出宝贵意见,最好写好并分析一下,不胜感激。
...全文
351 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
feihong0233 2015-12-13
  • 打赏
  • 举报
回复
如果一个表的数据超多并且查询语句还很复杂,应该考虑修整数据存储结构,嵌套表适用于数据记录较少的数据表,当数据量较大时,应考虑建立带有时间戳的抽象汇总表,在cpu空闲时更新并在日常使用
feihong0233 2015-12-13
  • 打赏
  • 举报
回复
1、合理增加索引可以解决部分问题 2、增加架构,数据分段记录,并且生成分段统计表,使用汇总或者统计数据时直接使用统计表
mr_ding_860101 2015-12-11
  • 打赏
  • 举报
回复
这么多like ‘%%’ 导致全表扫描,铁定的
LongRui888 2015-12-10
  • 打赏
  • 举报
回复
除了时间条件,别直接用datediff >=0之外,建议把not in去掉,至少也得改成not exists。
Yole 2015-12-04
  • 打赏
  • 举报
回复
看一下执行计划,有没有走time上的索引
zhangweitc123 2015-12-04
  • 打赏
  • 举报
回复
可是我试了一下,time<=xxx and time <=xxx没有原先的快
Yole 2015-12-04
  • 打赏
  • 举报
回复
把datediff函数去掉,直接用time 和 ‘xxxx-xx-xx ’时间比较 time<=xxx and time <=xxx
zhangweitc123 2015-12-04
  • 打赏
  • 举报
回复
还有其他的办法吗,并没有明显的提高
zhangweitc123 2015-12-03
  • 打赏
  • 举报
回复
嗯,明早试一下,刚才好像时间变成大于小于的变慢了
等不到来世 2015-12-03
  • 打赏
  • 举报
回复
id也必须有索引。
等不到来世 2015-12-03
  • 打赏
  • 举报
回复

--1. 请务必在time列上加索引。
--2. 更改如下条件:

and DATEDIFF(SECOND,'2015-11-01 16:34:42',time)>=0  
and DATEDIFF(SECOND,time,'2015-12-01 16:34:51')>=0  

--改为:
and time>='2015-11-01 16:34:42' and time <='2015-12-01 16:34:51'

22,302

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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