sql数据库查询的索引

阿狸Ahri 2015-05-09 03:42:26
我有一张表 假设有字段 id,price,AddTime,

现在我想查这个月的price总和,还有上个月的price总和,或者去年某个月份的总和。

由于数据很多,我是不是应该给AddTime建立一个索引?(dateTime类型)

我现在知道的是比如

select * from A where AddTime between '2001-02-03' and '2002-03-03'
或者 AddTIme='' 这样设置查询条件的时候 AddTime这个索引是有效的。

但是我用的是
select * from A where CONVERT(char(6),i.AddTime,112)= '200506' 这样的形式的,
我想问,这个是有AddTime这个索引是不是无效了...

在这种情况下我该怎么做才能提高查询的速度...我需要的是 查询某年的某个月份。

我现在想的就是 把传进来的日期比如201506,把它改装成两个 2015-06-01 00:00:00 和 2015-06-30 23:59:59,然后用between
但是我觉得拆来拆去好恶心的说,我里面本来就很冗余了。
...全文
194 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
双鱼星星 2015-05-10
  • 打赏
  • 举报
回复
有没有走索引,你运行一下执行计划就知道了。恶心是因为软件分层设计没有做好,按MVC架构来分层就不会觉得恶心了。
另外楼上提的时间段选取还要关注,between没有>=和<准确。
xiaoxiangqing 2015-05-10
  • 打赏
  • 举报
回复
AddTime,price建联合索引。
hery2002 2015-05-10
  • 打赏
  • 举报
回复
在Addtime上面建立索引, 然后传入参数格式化为datetime类型再进行比较
还在加载中灬 2015-05-09
  • 打赏
  • 举报
回复
AddTime between '2001-02-03' and '2002-03-03' 这个方式 在你的数据的上下文中应该是会走索引的 CONVERT(char(6),i.AddTime,112)= '200506' 这个列进行计算了,在任何数据的上下文中不会走索引 该拆就拆吧,不过,对于时间范围,你应该改下习惯,万一精确到3又3分之毫秒呢 AddTime >= '2015-06-01' and AddTime < '2015-07-01'

34,590

社区成员

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

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