统计200万条数据需要12分钟,太痛苦了。请高手指教下有没有什么好的方法让他执行得快些。在此先谢过!数据库是SqlServer2005,有一张表,表里面有200万条数据,按时间段进行分组统计。我是这样写sql语句的:SELECT COUNT(*) FROM table1 WHERE time1 BETWEEN '' AND '' GROUP BY time1
time1建立索引了吗?
除了dudu的问题。
修改为SELECT COUNT(0) FROM table1 WHERE time1 BETWEEN '' AND '' GROUP BY time1
然后自己看下查询计划。
是否试过将Year(time1)另建一个新字段?
如果是日期类型字段,建立聚合索引。这样要快的多!
预处理是不二法门,先建立聚合表,每插入一条数据时,就在聚合表中累加,到时直接查聚合表就好了。
或者上数据仓库,索引等无法彻底解决问题
SELECT COUNT(*) FROM table1 WHERE time1 BETWEEN '________________' AND '________________'
union all
select count(*) from table1
贴一下执行结果。
再贴一下
SELECT COUNT(*),year(time1) FROM table1 WHERE time1 BETWEEN '________________' AND '________________' group by year(time1)
的执行计划。
要是不精确到时间只到日期 的话可以考虑报日期拆成year,month,day,对int的操作会快很多
提供一个思路,优化如下:
1.在time1上建立Index,如果已经建立Index就重建Index(如果有索引碎片,会影响查询速度)
2.Count(*)改为Count(1),因为只是统计计数
3.如果time1没有重复值,Group by不需要.
4.再就是看你Server的配置了.
希望对你有所帮助.
利用冗余字段吧。YEAR(time1) 是一函数,没法使用索引的,加个 YEAR 的冗余字段然后加下索引,就很容易解决这个问题了。
关注此贴,楼主索引是怎么建的呢?
select max(列名ID) from 表名
这样会快点
还有一种是
select count(1)from 表名
你试试