两种SQLSERVER的 GroupBy 效率哪个高?

iAm_Ike 2020-09-11 04:46:23
Table表有一个字段Time,类型是datetime,存的数据格式是 "2020-01-01 00:00:00",我要对数据的天数进行group by,也就是以"yyyy-MM-dd"的形式分组。


第一种方法是直接在group by里把Time字段用函数进行日期的格式化。



另一种是另再加三个字段,Year,Month,Day,对年、月、日单独储存,然后再group by Year,Month,Day。


哪个效率高?
...全文
365 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
appo_li 2020-09-15
  • 打赏
  • 举报
回复
第一种效率更高
卖水果的net 版主 2020-09-14
  • 打赏
  • 举报
回复
肯定是 group by 的列越少越好了。 具体的说效率差多少,其实也差不了多少。
吉普赛的歌 版主 2020-09-13
  • 打赏
  • 举报
回复
差不了多少, 不需要在这上面计较。 建议还是直接按日期来 group by. 如果是真的慢, 请你直接贴出实际的 sql. 如果你真要计较, 下面的做法是值得你参考的, 一劳永逸:
USE tempdb
GO
CREATE TABLE t(
	id INT IDENTITY(1,1) PRIMARY KEY,
	[Time] DATETIME
)
GO
INSERT INTO t VALUES ('2020-09-01 23:15:00')
INSERT INTO t VALUES ('2020-09-02 22:15:00')
INSERT INTO t VALUES ('2020-09-02 23:15:00')
GO
--------- 以上为测试表及测试数据

--1. 增加计算列
ALTER TABLE t ADD yyyyMMdd AS CONVERT(CHAR(10),[Time],120) PERSISTED;
GO
--2. 增加索引
CREATE INDEX IX_t_yyyyMMdd ON t(yyyyMMdd);
GO

--3. 汇总查询
SELECT yyyyMMdd,COUNT(1) AS cnt FROM t GROUP BY yyyyMMdd
文盲老顾 2020-09-12
  • 打赏
  • 举报
回复
如果按日期统计,效率应该是一致的,毕竟日期型在实际存储数据时也是一种数字型的值,如果按月,或者按年统计,那么单独字段比日期字段略高,也高不了多少那种
  • 打赏
  • 举报
回复
你完全可以设计表的时候 date 和 time 为两个字段分开

34,838

社区成员

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

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