教程学院
图像设计 多媒体类 机械制图 办公软件 操作系统 系统编程 网站编程 网页制作 数据库类 网络路由 网络工程 网络安全 考试认证
firefox火狐浏览器下载
酷网学院
CAD
AutoCad Cam350 ProEngineer GCcam MATLAB Unigraphics SolidWorks CAXA Solid3000 Cimatron EdgeCAM
系统
安全 防火墙 病毒 WinXP Win2003 Vista
数据库
编程
网络
精彩图库
  当前位置: 库库中文网 · 数据库类教程 · MSSQL教程 · MsSql综合技巧

怎么样优化sql地统计语句,增涨运行速度?

学院最新推荐文章
教程推荐
『怎么样优化sql地统计语句,增涨运行速度?』如果文章有大量图片,显示会较慢,请等待图片下载完成
 
点击数: 更新时间:2008-9-16 
各位前辈,小弟菜鸟,写了一个小程序用来统计服务器上的关于4中消费数据,主要是统计各个类的消费每个月每天6:00-23:59各个时段的消费次数,然后写入到本地Access数据库,主要代码如下:
C# code



case "01":

                case "03":

                case "05":

                case "07":

                case "08":

                case "10":

                case "12":

                    for (int d = 1; d <= 31; d++)

                    {

                        date = txtyear.Text + "-" + cobMonth.Text + "-" + d.ToString();

                        for (int t = 6; t <= 23; t++)

                        {



                            string QueryCT1 = "SELECT Count(*) FROM EM_RecBuf WHERE rectype = '1'AND ( Tdatetime BETWEEN '" + date + " " + t.ToString() + ":00:00' AND '" + date + " " + t.ToString() + ":59:59')";

                            string QueryCT2 = "SELECT Count(*) FROM EM_RecBuf WHERE rectype = '2'AND ( Tdatetime BETWEEN '" + date + " " + t.ToString() + ":00:00' AND '" + date + " " + t.ToString() + ":59:59')";

                            string QueryCT3 = "SELECT Count(*) FROM EM_RecBuf WHERE rectype = '3'AND ( Tdatetime BETWEEN '" + date + " " + t.ToString() + ":00:00' AND '" + date + " " + t.ToString() + ":59:59')";

                            string QueryCT4 = "SELECT Count(*) FROM EM_RecBuf WHERE rectype = '4'AND ( Tdatetime BETWEEN '" + date + " " + t.ToString() + ":00:00' AND '" + date + " " + t.ToString() + ":59:59')";

                            //string QueryCBS = "SELECT Sum(balance) FROM EM_RecBuf WHERE ( Tdatetime BETWEEN '" + date + " " + t.ToString() + ":00:00' AND '" + date + " " + t.ToString() + ":59:59')";



                            SqlCommand sqlcmd1 = new SqlCommand(QueryCT1, conn);

                            cct1 = int.Parse(sqlcmd1.ExecuteScalar().ToString());



                            SqlCommand sqlcmd2 = new SqlCommand(QueryCT2, conn);

                            cct2 = int.Parse(sqlcmd2.ExecuteScalar().ToString());



                            SqlCommand sqlcmd3 = new SqlCommand(QueryCT3, conn);

                            cct3 = int.Parse(sqlcmd3.ExecuteScalar().ToString());



                            SqlCommand sqlcmd4 = new SqlCommand(QueryCT4, conn);

                            cct4 = int.Parse(sqlcmd4.ExecuteScalar().ToString());



                            ccs = cct1 + cct2 + cct3 + cct4;



                            //SqlCommand sqlcmdCBS = new SqlCommand(QueryCBS, conn);

                            //cbs = sqlcmdCBS.ExecuteScalar().ToString();



                            string time = t.ToString();

                            //写入本地数据库

                            SaveTolocal(date,time,cct1,cct2,cct3,cct4,ccs);



                        }

                    };

                    break;




问题:
1、用循环统计一个月500多条记录,居然要花10多分钟,sql server的CPU占用率达90%,怎样优化统计4种“类别”(1.2.3.4)同一时段的查询,我用了4调
                        ( string QueryCT1 = "SELECT Count(*) FROM EM_RecBuf WHERE rectype = '1'AND ( Tdatetime BETWEEN '" + date + " " + t.ToString() + ":00:00' AND '" + date + " " + t.ToString() + ":59:59')";
                            string QueryCT2 = "SELECT Count(*) FROM EM_RecBuf WHERE rectype = '2'AND ( Tdatetime BETWEEN '" + date + " " + t.ToString() + ":00:00' AND '" + date + " " + t.ToString() + ":59:59')";
                            string QueryCT3 = "SELECT Count(*) FROM EM_RecBuf WHERE rectype = '3'AND ( Tdatetime BETWEEN '" + date + " " + t.ToString() + ":00:00' AND '" + date + " " + t.ToString() + ":59:59')";
                            string QueryCT4 = "SELECT Count(*) FROM EM_RecBuf WHERE rectype = '4'AND ( Tdatetime BETWEEN '" + date + " " + t.ToString() + ":00:00' AND '" + date + " " + t.ToString() + ":59:59')";)

2、//string QueryCBS = "SELECT Sum(balance) FROM EM_RecBuf WHERE ( Tdatetime BETWEEN '" + date + " " + t.ToString() + ":00:00' AND '" + date + " " + t.ToString() + ":59:59')";这一句什么地方有错,运行时总会出错,被我注释掉了!

小弟这里先拜谢了!

这个问题第1个回答:

可以合并成一句

string QueryCT4 = "SELECT Count(*) FROM EM_RecBuf WHERE rectype IN ('1','2','3', '4') AND ( Tdatetime BETWEEN '" + date + " " + t.ToString() + ":00:00' AND '" + date + " " + t.ToString() + ":59:59')";

这个问题第2个回答:
select Sum(balance)from EM_RecBuf  where ( Tdatetime BETWEEN '" + date + " " + t.ToString() + ":00:00' AND '" + date + " " + t.ToString() + ":59:59')";)
//改成这个就对了~~~~
这个问题第3个回答:
引用 1 楼 Garnett_KG 的回复:

可以合并成一句

string QueryCT4 = "SELECT Count(*) FROM EM_RecBuf WHERE rectype IN ('1','2','3', '4') AND ( Tdatetime BETWEEN '" + date + " " + t.ToString() + ":00:00' AND '" + date + " " + t.ToString() + ":59:59')";



谢谢,不过怎样将统计的结果分别返回给4个变量呢?
这个问题第4个回答:
引用 3 楼 chrisziling 的回复:
引用 1 楼 Garnett_KG 的回复:

[1] [2] 下一页  

作者:chriszil… 来源:C.S.D.N
】【关闭窗口
·上页:
·下页:
相关文章
     数据库类教程 - MsSql综合技巧
普通教程【脑袋快想爆炸了- -!】 怎么样
普通教程关于级联删除地疑难,新手提问,
普通教程怎么样动态控制列数?
普通教程数据库恢复 MS2000
普通教程当数据库中varchar字段值为null
普通教程create function 怎么才无法要返
普通教程各位帮我看看是啥疑难啊, SQL运
普通教程SQL server 2005 安装疑难 SP2更
普通教程sql update
普通教程update触发器地疑难
普通教程字符串地查询疑难
普通教程安全性--登陆--想建一个用户tes
精彩图片汇集
advertisement
关于站点 - 广告服务 - 联系我们 - 版权隐私 - 免责声明 - 合作伙伴 - 程序支持 - 网站地图 - 返回顶部
网站文本地图
版权所有:库库中文 2005-2007 欢迎各种媒体转载我们的原创作品[转载请注明出处]
copyright © 2005-2008 www.QQGB.com online services. all rights reserved. 蜀ICP备05015578
Template designed by Virus. Optimized for 1024x768 to Firefox,Opera and MS-IE6. Site powered by EQL.
红盾
热爱电脑,热爱生活
拥有电脑,拥有生命
让我们享受拥有电脑的时光