数据库是MSSQL2005,有一张表有四百多万条记录,表结构为:
ID,类别,访问时间
现在要统计某段时间内每个类别的访问量,我写的sql语句是
select 类别,count(1) as 访问量 from 数据表
where 访问时间 between '2007-9-1 ' and '2007-9-7 '
group by 类别
这个语句执行的巨慢,大约要3分多钟才能执行完,请问各位大侠有没有效率高一些的方法呢,多谢啦
------解决方案--------------------
sql2005可以对表数据进行分区,你可以对这张表的“访问时间”按年或者月来进行分区,并建立相应索引,速度应该还可以
------解决方案--------------------
select 类别,count(ID) as 访问量 from 数据表
where 访问时间 between '2007-9-1 ' and '2007-9-7 '
group by 类别
/*
有高手说count(主键)会快点
访问时间应该加个非聚集索引
*/
------解决方案--------------------
访问时间 不知有沒有建立索引啊?
select 类别,count(1) as 访问量 from 数据表
where 访问时间 between '2007-9-1 ' and '2007-9-7 '
group by 类别
這段話,比較簡單,也沒有什麼優化了,有建索引要更快些
------解决方案--------------------
select 类别,count(1) as 访问量 from 数据表
where 访问时间 between '2007-9-1 ' and '2007-9-7 '
group by 类别
----------
你写的这个语句是没有优化的余地了,如果你想提高查询效率的话
可在[访问时间]列建立非聚簇索引
不知LZ你对这张表插入和更新频不频繁???
(索引可提高查询效率,但同时又减慢插入或更新的效率)