我这里有一个表格,其中包含以下字段: 我,名字,种类。日期
数据:
id name kind date
1 Thomas 1 2015-01-01
2 Thomas 1 2015-01-01
3 Thomas 2 2014-01-01
4 Kevin 2 2014-01-01
5 Kevin 2 2014-01-01
5 Kevin 2 2014-01-01
5 Kevin 2 2014-01-01
6 Sasha 1 2014-01-01
我有一个这样的SQL语句:
Select name,kind,Count(*) AS RecordCount
from mytable
group by kind, name
我想知道有多少名字和种类的记录。预期结果:
name kind count
Thomas 1 2
Thomas 2 1
Kevin 2 2
Sasha 1 4
问题在于它是一张大表,有超过5000万条记录。
此外,我想知道最后一小时,最后一天,上周等结果,我需要在此添加此WHERE
条款:
Select name,kind,Count(*) AS RecordCount
from mytable
WHERE Date > '2015-26-07'
group by kind, name
我将T-SQL与SQL Server Management Studio一起使用。所有相关列都具有非聚簇索引,主键是聚簇索引。
有人有想法如何加快速度吗?
更新:
执行计划说:
抱歉,我忘了检查SQL语句。
答案 0 :(得分:0)
5000万只是很多行 你无法做任何事情来优化我能看到的查询
可能是种类的综合指数,名称
或尝试名字,种类
或仅命名
我认为查询优化器足够聪明,因为它不是一个因素,但是将组切换到名称,因为名称更独特,所以
如果种类不是很独特(只有1和2)那么你可能会更好地没有指数
我对您拥有的索引进行碎片整理
答案 1 :(得分:-1)
要查询最后一天是没什么大不了的,因为你已经有了一个日期列,你可以把索引放在上面。
对于上周,我会创建一个单独的日期表,每天包含一行,其中包含列ID,日期,星期 你必须预先计算一周。现在,如果您想查询特定的一周,您可以查看日期表,获取日期并仅查询您的tabele mytable 中的那些日期 您应该测试加入日期列是否更高效,或者您最好将myTable中的id列添加为id。对于大表,id可能是更好的选择。
要查询过去一小时,您可以在myTable中添加列[小时],并将其与日期结合使用